2016-11-17 9 views
0

Я вызываю API с помощью Retrofit2, который дает мне большой и сложный ответ. Это было прекрасно, поскольку все, что мне нужно было сделать, это десериализовать ответ в String, а затем включить его в activeMQ.Deserialize Retrofit2 ответ в JSON без Jackson

Однако, теперь я хотел бы добавить еще два Json атрибуты сложной реакции так, что она выглядит следующим образом:

{ "event": "some event", "link": "some link", "details": {complicated response ...} }

Как десериализации ответ как Json (javax.json .Json), поэтому я могу построить на нем JsonObject с новыми атрибутами, а затем String?

JacksonConverterFactory заставляет меня вписывать этот сложный ответ в POJO, и я не хочу этого делать! Прямо сейчас я добавляю строки в начало ответа, но это не идеальное решение.

+0

В качестве альтернативы, если есть лучшее решение в целом, я бы хотел его услышать! – Ella

ответ

1

Предполагая, что ваш большой и сложный ответ в виде строки с именем input, вы могли бы, возможно, сделать следующее:

JsonReader reader = Json.createReader(new StringReader(input)); 
JsonObject response = reader.readObject(); 

JsonObject queueMessage = 
    Json.createObjectBuilder() 
     .add("event", "some event") 
     .add("link", "some link") 
     .add("details", response) 
     .build(); 

Другой подход, который использует Джексон и не заставит вас десериализовать сложную реакцию в структура JSON-объектов, заключается в использовании аннотации @JsonRawValue, которая позволяет вам пометить поле String как уже содержащее JSON, которое должно быть включено дословно во время сериализации.

Это позволяет сделать что-то вроде:

public class MQMessage { 
    public String event, link; 

    @JsonRawValue 
    public String details; 
} 


MQMessage message = new MQMessage(); 
message.event = "some event"; 
message.link = "Some link"; 
message.details = input; 

String forMQ = new ObjectMapper().writeValueAsString(message); 

Имейте в виду, что Джексон не делает никакого подтверждения того, что на самом деле details содержит действительный JSON.

+1

Да, это сработало. Спасибо! – Ella

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