spring.jackson.serialization.fail-на-порожних-бобов - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь понять, когда происходит сбой на пустом bean-компоненте, из документа:

public static final SerializationFeature FAIL_ON_EMPTY_BEANS Функция, которая определяет, что происходит, когда не найдены методы доступа для типа (и естьнет аннотаций, чтобы указать, что он предназначен для сериализации).Если включено (по умолчанию), выдается исключение, чтобы указать их как несериализуемые типы;если отключено, они сериализуются как пустые объекты, т.е. без каких-либо свойств.Обратите внимание, что пустые типы, которые эта функция оказывает влияние только на те «пустые» бины, которые не имеют каких-либо распознанных аннотаций (например, @JsonSerialize): те, которые имеют аннотации, не приводят к исключению.

Featureпо умолчанию включен.

Теперь я попытался создать пустой POJO (без методов получения):

@Component
public class Wrapper2 {

    private String name;

}

Класс оболочки, который я хочу сериализовать:

@Component
public class Wrapper {

        @Autowired
        private Wrapper2 wrapper2;


}

Контроллер:

@RestController
public class TestController {
    @Autowired
    private Wrapper wrapper;

        @GetMapping("/test")
        public Wrapper test() {
          return wrapper;
        }
    }

однако я всегда сериализую обертку даже с добавлением / удалением геттера и сеттера для обертки2.Кто-нибудь может объяснить, когда может произойти ошибка?

1 Ответ

0 голосов
/ 30 декабря 2018

Ваш боб должен быть пустым и без распознанных аннотаций

Обратите внимание, что для пустых типов эта функция действует только на те "пустые"bean-компоненты, которые не имеют каких-либо распознанных аннотаций

Таким образом, если вы удалите аннотации, это не удастся

public class Wrapper {

}

Ошибка будет

Unrecognized field "wrapper" (class com.Wrapper ), not marked as ignorable (0 known properties: ])

Джексон соответствующий код применяется, когда помечается как UnknownSerializer:

if (isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)) {
        if (ser instanceof UnknownSerializer) {
            return true;

Аналогичное исключение для вложенного пустого класса:

public class Wrapper {
   private Wrapper2 wrapper2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...