我正在与Jersey和Jackson构建REST API。我使用本教程(http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/)开始使用Jackson。
我想在发送之前签署回复。如何获取将生成的JSON字符串,以便我可以签名?
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Response getTrackInJSON() {
Track track = new Track();
track.setTitle("Enter Sandman");
track.setSinger("Metallica");
String HMAC = HMAC("[secret]", [track.toJson]);
return Response.status(201).entity(track).header("HMAC", HMAC).build();
}
我还想验证一个请求的签名:
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
public Response createTrackInJSON(Track track) {
String rawRequestBody = [how to get the raw request?];
//get header
//verify HMAC
return Response.status(201).entity(result).build();
}
所以我的重要问题是如何获取将在对象发送之前生成的原始JSON字符串?
感谢您的回答
答案 0 :(得分:0)
两者都可以通过绕过泽西岛的默认输入/输出数据绑定并直接使用杰克逊来完成。为此,您可以将输入声明为byte[]
或InputStream
,并使用杰克逊的ObjectMapper.readValue(...)
。对于输出,您将声明返回byte[]
(可能在Response
内),并使用ObjectMapper.writeValueAsBytes(responsePojo)
。或者,如果使用字符串更容易(我忘记了HMAC计算如何工作的详细信息),ObjectMapper.writeValueAsString(responsePojo)
将序列化为String
。