He la clase siguiente:Fuerza Jackson para añadir envoltura addional utilizando anotaciones
public class Message {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Al convertir la instancia a JSON usando Jackson por defecto me sale:
{"text":"Text"}
me gustaría obtener:
{"message":{"text":"Text"}}
¿hay alguna anotación JAXB/Jackson que puedo utilizar para lograr mi objetivo?
Como solución, puedo envolver mi clase con otra clase:
public class MessageWrapper {
private Message message;
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
}
o una solución más genérica:
public class JsonObjectWrapper<T> {
/**
* Using a real map to allow wrapping multiple objects
*/
private Map<String, T> wrappedObjects = new HashMap<String, T>();
public JsonObjectWrapper() {
}
public JsonObjectWrapper(String name, T wrappedObject) {
this.wrappedObjects.put(name, wrappedObject);
}
@JsonAnyGetter
public Map<String, T> any() {
return wrappedObjects;
}
@JsonAnySetter
public void set(String name, T value) {
wrappedObjects.put(name, value);
}
}
que se pueden utilizar de este modo:
Message message = new Message();
message.setText("Text");
JsonObjectWrapper<Message> wrapper = new JsonObjectWrapper<Message>("message", message);
¿Hay alguna anotación JAXB/Jackson que pueda usar para lograr ¿mi meta?
Gracias.
StaxMan, si el nombre del elemento raíz de la cadena JSON tiene que ser ignorado durante la serialización, hace Jackson 1.9 nos obligan a establecer la función 'DeserializationConfig.Feature.UNWRAP_ROOT_ELEMENT' solo o la adición de la anotación' @JsonRootName 'se requiere también? – asgs
Tendría que verificar: UNWRAP podría ser suficiente; La pregunta es si el nombre tiene que mapear. Pero incluso sin '@ JsonRootName', existe el nombre predeterminado (nombre de clase simple), que puede funcionar bien. – StaxMan
funcionó! muchas gracias. – asgs