2014-10-11 22 views
5

Tôi cần đọc nội dung của yêu cầu json được gửi đến dịch vụ dropwizard. Bản thân thông điệp được tuần tự hóa bởi dropwizard đến obbject chú thích, là đầu vào của phương thức (đối tượng PaymentMessage). Tôi đã thêm HttpServletRequest làm thông số đầu vào của phương thức. Số HttpServletRequest không phải là rỗng, nhưng phương thức HttpServletRequest#getInputStream() trả về một luồng không rỗng là trống dòng.Đọc nội dung yêu cầu được gửi đến dịch vụ dropwizard

Các curl: curl -i -X POST -H'Content-Type: application/json; charset=UTF-8' \ http://localhost:8080/NL/users/555855/payments -d '{"eventId":"110099110099","hznHouseholdId":"1234567_nl","ipAddress":"123.123.123.123","transactionId":"799ef666-e09c-8350-247b-c466997714ad","transactionDate":"2014-09-29T16:56:21Z","appName":"Flappy Bird"}'

Mã:

@POST 
@Path("/{countryCode}/users/{customerId}/payments") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Response processPaymentAction(
     @Context final HttpServletRequest request, 
     @Nonnull @PathParam("countryCode") final String countryCode, 
     @Nonnull @PathParam("customerId") final String customerId, 
     @Valid PaymentMessage paymentMessage) 
     throws IOException, ServletException { 

    LOG.debug("Request "+request.toString()); 
    final ByteSource byteSource = new ByteSource() { 
     @Override 
     public InputStream openStream() throws IOException { 
      return request.getInputStream(); 
     } 
    }; 
    LOG.debug("charset "+request.getCharacterEncoding()); 
    final String contents = byteSource.asCharSource(Charset.forName(request.getCharacterEncoding())).read(); 
    LOG.debug("contents: "+contents); 
    return Response.status(Response.Status.ACCEPTED).build(); 
} 
+0

Nội dung bài đăng phải được ánh xạ tới PaymentMessage như bạn đã nói. Bạn đang cố gắng thoát ra khỏi đối tượng yêu cầu mà chưa phải là một phần của POJO mà Jackson nên đã lập bản đồ cho bạn? – th3morg

+0

Tôi đã cố gắng để có được cơ thể của tin nhắn ở dạng chuỗi và serialized cho một đối tượng POJO vì 1. Tôi muốn sử dụng cơ thể để xác nhận tổng md5 của yêu cầu 2. Tôi muốn có đầu vào serialized cho một đối tượng bởi vì các đối tượng dễ sử dụng hơn :) –

Trả lời

5

Bạn có thể thay đổi PaymentMessage paymentMessage tham số để String paymentMessage mà nên là chuỗi json. Sau đó, sẽ không có bất kỳ xác nhận nào mặc dù bạn cũng sẽ không có POJO trực tiếp.

+0

Vâng, cuối cùng đó là những gì tôi đã làm, deserializing chuỗi bản thân mình với POJO. –

Các vấn đề liên quan