2015-11-07 4 views
0

Я создаю API REST с Джерси и Джексоном. Я использовал этот учебник (http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/), чтобы начать работу с Джексоном.Создайте HMAC перед отправкой ответа JSON с Jackson + Jersey

Я хочу подписать ответ перед его отправкой. Как я могу получить строку 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(); 

} 

Я также хочу, чтобы проверить подпись на Incomming запросу:

@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

Оба могут быть выполнены с помощью обходя привязки ввода по умолчанию/выходные данные-Джерси, и с помощью Джексон напрямую. Для этого вы объявите ввод в качестве byte[] или InputStream и используете ObjectMapper.readValue(...) от Jackson. И для вывода вы объявите возвращение byte[] (возможно в пределах Response) и используйте ObjectMapper.writeValueAsBytes(responsePojo). Или, если проще работать со Струнами (я забыл детали о том, как работает расчет HMAC), ObjectMapper.writeValueAsString(responsePojo) дал бы сериализацию как String.

Смежные вопросы