Есть класс Building.
Building{
Long Id;
String name;
Integer countRooms;
}
И есть класс Room
Room{
Long Id;
String name;
Building building;
}
Когда я делаю запрос /buildings?id=1 Выводится JSON как мне и нужно.
{
"id": 1,
"name":name,
"counRooms": 1
}
А когда делаю запрос /rooms?id=1 Выводится JSON
{
"id":1,
"name": name,
"buiding":{
"id": 1,
"name":name,
"countRooms": 1
}
Но мне в этом ответе поле countRooms не нужно. Пробовал JsonIgnore но тогда это поле не выводится в первом случае . Помогите разобраться. Буду благодарен.
Вашу задачу можно решить при помощи аннотации Jackson @JsonView
. Эта аннотация позволяет включать или исключать поля объекта, попадающие в сериализованный объект, в зависимости от условия - активного view. Возьмём, например, вот такой код:
// Класс, содержащий интерфейсы, которыми мы будем обозначать наши view
public class Views {
public interface Public {}
public interface Private extends Public {};
}
// При активном Views.Public включаются все поля...
@JsonView(Views.Public.class)
public class Bean {
private long id;
private String name;
// ... кроме поля secret. Поле secret включится при активном Views.Private.
// Так как Views.Private - наследник Views.Public, то при активном Views.Private
// будет также активен и Views.Public, а значит, будут включены и поля, включённые
// при активном Views.Public
@JsonView(Views.Private.class)
private String secret;
// constructor, getters, setters
}
Теперь укажем контроллеру, какой view использовать для сериализации:
@RestController
public class Controller {
// В ответе будут поля id и name
@JsonView(Views.Public.class)
public Bean getPublic() {
return new Bean(1, "name", "secret");
}
// В ответе будут поля id, name и secret
@JsonView(Views.Private.class)
public Bean getPrivate() {
return new Bean(1, "name", "secret");
}
}
Применительно к вашей задаче, вам нужно будет создать два view - RoomView
и BuildingView
(наследник RoomView
). RoomView
нужно навесить на классы Room
и Building
, а BuildingView
- на поле Building.countRooms
. Также нужно навесить RoomView
на контроллер /rooms
и BuildingView
на контроллер /buildings
. После этого /buildings
будет возвращать JSON с полем countRooms
, а /rooms
- без него.
Подробнее про JSON Views в Jackson можно почитать здесь или здесь.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Скрыл программно статус-бар и нижнюю панель навигацииНо при свайпе снизу вверх в нижней части экрана навигационная панель выезжает
Вылетает Exception при компиляции jrxml jrxml file:
Есть библиотека которая использует HashMap из стандартной библиотекиКак можно сделать так, чтобы она использовала мой HashMap? Код библиотеки трогать...
В строке присвоения значения rootdata возникает ошибка NullPointerExeption, не могу понять почему