Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Как запретить сериализовать некоторые поля в JSON?

#java #json #spring #jackson #аннотации


Обращаюсь к контроллеру, который должен вернуть список объектов. Объекты преобразуются
в JSON строку. При преобразовании объектов в JSON строку вызываются все геттеры объектов.
И в результате возвращаются все данные объекта. Как запретить возврат некоторых полей
объекта, может есть специальная аннотация?

@Controller
@MessageMapping("/v1.0")
public class MyController {

    @MessageMapping("/getList")
    @SendTo("/topic/List")
    public Collection getList() throws Exception {
        return this.MyObjService.getList();
    }

}


Собственно класс будущих объектов:

public class MyObj {
    private String name;
    private String login;

    public String getName() {
       return name;
    }

    public String getLogin() {
       return login;
    }

}


Хотелось бы запретить возврат поля login.
    


Ответы

Ответ 1



Как заметил @ArtemKonovalov по-умолчанию Spring использует в качестве JSON Mapper-а библиотеку Jackson. Она предлагает использовать аннотацию @JsonIgnore. Но рано или поздно вы захотите с одного объекта получить два разных JSON, отличающихся набором полей. Поэтому, по-хорошему нужно сделать отдельные DTO без логики, которые вы будете целиком сериализовать в JSON. PS. Кроме того, рекомендую взять за правило всегда явно вешать на поля аннотацию @JsonProperty и явно указывать в ней имя поля. Иначе случайный рефакторинг с переименованием поля поломает ваш API.

Комментариев нет:

Отправить комментарий