Что такое класс JSON View в Джексоне и как он работает?
Я не понимаю, что такое @JsonView Джексона (Views.MyClass.class). Я знаю, что могу аннотировать поля и методы POJO таким образом, чтобы отфильтровать неаннотированные поля от сериализации с помощью JSON. Но что такое класс Views.Myclass? Это шаблонный класс для библиотеки Джексона?
И почему внутри класса Views может быть много классов? Например, вот так:
class Views {
static class Public { }
static class ExtendedPublic extends PublicView { }
static class Internal extends ExtendedPublicView { }
}
Зачем это нужно и как это работает?
1 ответ
Использование @JsonView
фильтровать поля в зависимости от контекста сериализации. При возврате данных клиенту REST, в зависимости от того, какая служба REST была вызвана, нам необходимо ограничить сериализацию данных при использовании одной и той же модели данных.
Допустим, мы хотим создать две службы REST:
Первая служба возвращает некоторую информацию о пользователе, такую как имя и фамилия, но не прикрепленные к ней сообщения.
Второй сервис возвращает всю информацию из первого сервиса, а также сообщения, прикрепленные к текущему пользователю.
Примеры классов POJO с @JsonView
аннотирование
Пользователь Pojo classs
@JsonView(User.Views.Public.class)
public String getFirstname() {
return firstname;
}
@JsonView(User.Views.Public.class)
public String getLastname() {
return lastname;
}
Сообщение Pojo класс
@JsonView(User.Views.Internal.class)
public List<Message> getMessages() {
return messages;
}
Контроллер отдыха
@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();
}
}