2009-10-10 7 views
41

Tôi đang viết mã cần trích xuất một đối tượng theo nghĩa đen được đăng lên một servlet. Tôi đã nghiên cứu API cho đối tượng HttpServletRequest, nhưng nó không rõ ràng với tôi làm thế nào để có được đối tượng JSON ra khỏi yêu cầu vì nó không được đăng từ một phần tử biểu mẫu trên một trang web.Truy xuất JSON Object Literal từ HttpServletRequest

Bất kỳ thông tin chi tiết nào được đánh giá cao.

Cảm ơn.

+1

Câu hỏi của bạn khó hiểu. Vui lòng hiển thị mã JavaScript (hoặc bất kỳ thứ gì có thể) gây ra một thứ gì đó được POST tới servlet, nếu nó không phải là một biểu mẫu. Nếu bạn đang tìm kiếm một số phương thức J2EE được xây dựng sẵn để hiểu các ký tự đối tượng JSON, thì không có gì. –

+1

Vấn đề của bạn là bạn đang cố gắng gửi một đối tượng json từ trình duyệt tới servlet và bạn không thể lấy thông tin trên servlet? –

+1

Xem thêm http://stackoverflow.com/questions/3831680/httpservletrequest-get-post-data – Vadzim

Trả lời

51

bạn đang tìm kiếm điều này?

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    StringBuilder sb = new StringBuilder(); 
    BufferedReader reader = request.getReader(); 
    try { 
     String line; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line).append('\n'); 
     } 
    } finally { 
     reader.close(); 
    } 
    System.out.println(sb.toString()); 
} 
+3

Phương pháp này chuyển đổi json đại diện thành một chuỗi, nhưng tôi nghĩ rằng nó có lẽ không phải là cách tốt nhất để xử lý dữ liệu json. –

5

Nếu bạn đang cố lấy dữ liệu ra khỏi phần thân yêu cầu, mã bên trên hoạt động. Nhưng, tôi nghĩ rằng bạn đang gặp vấn đề tương tự như vậy ..

Nếu dữ liệu trong nội dung ở dạng JSON và bạn muốn nó là đối tượng Java, bạn sẽ cần phải phân tích cú pháp đó hoặc sử dụng thư viện như google-gson để xử lý nó cho bạn. Bạn nên xem các tài liệu và ví dụ tại trang web của dự án để biết cách sử dụng nó. Nó khá đơn giản.

1

Chuyển đổi dữ liệu truy xuất từ ​​các đối tượng yêu cầu đối tượng json là như dưới đây sử dụng google-gson

Gson gson = new Gson(); 
ABCClass c1 = gson.fromJson(data, ABCClass.class); 

//ABC class is a class whose strcuture matches to the data variable retrieved 
17

Cách đơn giản nhất là để cư trú đậu của bạn sẽ là từ một đối tượng Reader, điều này có thể được thực hiện trong một cuộc gọi duy nhất:

BufferedReader reader = request.getReader(); 
Gson gson = new Gson(); 

MyBean myBean = gson.fromJson(reader, MyBean.class); 
9

tận dụng các bộ vi xử lý jackson JSON

ObjectMapper mapper = new ObjectMapper(); 
    Book book = mapper.readValue(request.getInputStream(),Book.class); 
+0

Điều này thật hoàn hảo! Bạn đá! –

+0

@Clyde D'Cruz Làm thế nào để sử dụng trong khi sử dụng HttpExchange .. ?? – Hema

10

Có một cách khác để làm điều đó, sử dụng org.apache.commons.io.IOUtils để trích xuất các chuỗi từ yêu cầu

String jsonString = IOUtils.toString(request.getInputStream()); 

Sau đó, bạn có thể làm bất cứ điều gì bạn muốn, chuyển nó sang JSON hoặc đối tượng khác với Gson vv

JSONObject json = new JSONObject(jsonString); 
MyObject myObject = new Gson().fromJson(jsonString, MyObject.class); 
2

Đây là phương pháp đơn giản để có được dữ liệu yêu cầu từ HttpServletRequest sử dụng Java 8 Suối API:

String requestData = request.getReader().lines().collect(Collectors.joining());