tutorial - leer json en java
¿Qué es la clase JSON View en Jackson y cómo funciona? (1)
Use @JsonView
para filtrar los campos según el contexto de la serialización. Al devolver datos a un cliente REST, dependiendo de qué servicio REST se haya llamado, debemos limitar qué datos se serializarán al usar el mismo modelo de datos.
Digamos que queremos crear dos servicios REST:
El primer servicio devuelve información del usuario como el nombre y el apellido, pero no los mensajes adjuntos.
El segundo servicio devuelve toda la información del primer servicio y también los mensajes adjuntos al usuario actual.
Ejemplos de clases POJO con anotación @JsonView
Clases de usuario Pojo
@JsonView(User.Views.Public.class)
public String getFirstname() {
return firstname;
}
@JsonView(User.Views.Public.class)
public String getLastname() {
return lastname;
}
Clase de mensaje Pojo
@JsonView(User.Views.Internal.class)
public List<Message> getMessages() {
return messages;
}
Controlador de descanso
@RestController
public class SimpleRestController {
@Autowired
SimpleService simpleService;
@RequestMapping(value = "/user/public", method = RequestMethod.GET)
@JsonView(User.Views.Public.class)
public User getUserWithPublicData() {
return simpleService.loadUser();
}
@RequestMapping(value = "/user/internal", method = RequestMethod.GET)
@JsonView(User.Views.Internal.class)
public User getUserWithInternalData() {
return simpleService.loadUser();
}
}
No entiendo qué es el @JasonView de Jackson ( Views.MyClass.class ). Sé que puedo anotar los campos y métodos de POJO de esta manera para filtrar los que no son anotados y que se serialicen con JSON. Pero, ¿qué es la clase Views.Myclass? ¿Es una clase de plantilla para la biblioteca de Jackson?
¿Y por qué puede haber muchas clases dentro de la clase Views? Por ejemplo, así:
class Views {
static class Public { }
static class ExtendedPublic extends PublicView { }
static class Internal extends ExtendedPublicView { }
}
¿Por qué es necesario y cómo funciona?