Posible configurar Jackson JSON Mapper para excluir las propiedades sobre la base de qué objeto se serializar?
Pregunta
Decir que tengo objetos tales como un negocio con una lista de objetos de dirección, y una orden que tiene un negocio.
¿Es posible configurar, de modo que cuando la orden es de serie que excluye de la lista de direcciones del objeto de negocio, y cuando se serializa el negocio que incluye la lista?
Estoy usando ajax a los datos de atracción para un RIA y cuando se trabaja con la Orden que realmente no se preocupan por los datos de dirección, pero cuando se trata de negocios sí quiero la lista.
También estoy usando Hibernate para la persistencia así que esto es realmente una optimización de la eficiencia y el rendimiento.
Solución
Si entiendo pregunta correctamente, sí, creo que JSON Vistas para Jackson permitiría esto. Es, básicamente, crear dos puntos de vista diferentes (perfiles) de mismo tipo, y elegir la que desee utilizar para la serialización.
Otros consejos
Se podría utilizar el JsonIgnore anotación ignorar el Dirección en la serialización y apague el uso de anotaciones en el ObjectMapper 's SerializationConfig al serializar un Empresas . Por supuesto, esto significa que otras anotaciones que podría utilizar son ignorados también. No es perfecto, pero es posible encontrar una solución mejor mirar en esto, creo que sirve (obviamente).
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);
Sí, puede hacerlo. Todo lo que necesita es declarar la lista de direcciones como propiedad transitoria en su objeto del negocio.
A continuación, añadir el siguiente código a su jsonConfig:
jsonConfig.setIgnoreTransientFields(true);
@JsonIgnore
se utiliza para ignorar propiedades que no desea convertir a JSON.
public class UserDocument {
private long id;
private String documentUrl;
@JsonIgnore
private byte documentType;
//traditional getters and setters
}
Salida: Esto convertirá las propiedades id y documentUrl , pero no convertirá la propiedad Tipo de documento .
{
"id": 5,
"document_url": "/0/301115124948.jpg"
}