java - metodos - peticiones get y post php
Leer el cuerpo de una solicitud enviada a un servicio dropwizard (1)
Puede cambiar el parámetro PaymentMessage paymentMessage
a String paymentMessage
que debe ser la cadena json. Entonces, no habrá ninguna validación, ni tampoco tendrás el POJO directamente.
Necesito leer el contenido de la solicitud json enviada a un servicio dropwizard. El mensaje en sí mismo es serializado por dropwizard al objeto anotado que es la entrada del método (objeto PaymentMessage
). He agregado HttpServletRequest
como un parámetro de entrada del método. El HttpServletRequest
no es nulo, pero el método HttpServletRequest#getInputStream()
devuelve un flujo no nulo pero vacío .
El 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"}''
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"}''
El código:
@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();
}