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();
}
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
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 :) –