Queremos brindarte la mejor solución que encontramos on line. Queremos que te sea de utilidad y si puedes comentarnos cualquier detalle que nos pueda ayudar a crecer hazlo con libertad.
Solución:
Añade el @JsonIgnoreProperties("fieldname")
anotación a su POJO.
O puedes usar @JsonIgnore
antes del nombre del campo que desea ignorar al deserializar JSON. Ejemplo:
@JsonIgnore
@JsonProperty(value = "user_password")
public String getUserPassword()
return userPassword;
Ejemplo de GitHub
Sé que llegué un poco tarde a la fiesta, pero también me encontré con esto hace unos meses. Todas las soluciones disponibles no me atraían mucho (¿mezclas? ¡uf!), así que terminé creando una nueva biblioteca para hacer este proceso más limpio. Está disponible aquí si alguien quiere probarlo: https://github.com/monitorjbl/spring-json-view.
El uso básico es bastante simple, usas el JsonView
objeto en los métodos de su controlador así:
import com.monitorjbl.json.JsonView;
import static com.monitorjbl.json.Match.match;
@RequestMapping(method = RequestMethod.GET, value = "/myObject")
@ResponseBody
public void getMyObjects()
//get a list of the objects
List list = myObjectService.list();
//exclude expensive field
JsonView.with(list).onClass(MyObject.class, match().exclude("contains"));
También puedes usarlo fuera de Spring:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import static com.monitorjbl.json.Match.match;
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(JsonView.class, new JsonViewSerializer());
mapper.registerModule(module);
mapper.writeValueAsString(JsonView.with(list)
.onClass(MyObject.class, match()
.exclude("contains"))
.onClass(MySmallObject.class, match()
.exclude("id"));
¿Puedo hacerlo dinámicamente?
Crear clase de vista:
public class View
static class Public
static class ExtendedPublic extends Public
static class Internal extends ExtendedPublic
Anota tu modelo
@Document
public class User
@Id
@JsonView(View.Public.class)
private String id;
@JsonView(View.Internal.class)
private String email;
@JsonView(View.Public.class)
private String name;
@JsonView(View.Public.class)
private Instant createdAt = Instant.now();
// getters/setters
Especifique la clase de vista en su controlador
@RequestMapping("/user/email")
public class UserController
private final UserRepository userRepository;
@Autowired
UserController(UserRepository userRepository)
this.userRepository = userRepository;
@RequestMapping(method = RequestMethod.GET)
@JsonView(View.Internal.class)
public @ResponseBody Optional get(@PathVariable String email)
return userRepository.findByEmail(email);
Ejemplo de datos:
"id":"5aa2496df863482dc4da2067","name":"test","createdAt":"2018-03-10T09:35:31.050353800Z"