Как отключить fail_on_empty_beans в Джексоне?

Используя jackson 2.1, как отключить fail_on_empty beans, что сообщение об ошибке кажется мне отключенным?

Я предполагаю, что это просто самая простая вещь в мире, но, черт возьми, поздно, и я не смог найти простой учебник или что-то особенно очевидное из api. SerializationFactory? Почему они делают это настолько неинтуитивным, а затем делают сообщение об ошибке таким простым?

Хотя мне действительно нравится сообщение об ошибке, я имею в виду, что это лучше, чем NPE.

Я предполагаю, что есть способ сделать это с помощью аннотаций, но я не хочу использовать их вообще для упрощенной работы, которую я делаю!

Ответ 1

Вы можете сделать это для каждого класса или во всем мире, я полагаю.

Для каждого класса попробуйте @JsonSerialize над объявлением класса.

Для устройства отображения здесь один пример:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// do various things, perhaps:
String someJsonString = mapper.writeValueAsString(someClassInstance);
SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)

В приведенной ниже ссылке StackOverflow приведен пример проекта Spring.

Для REST с Джерси я не помню с головы, но считаю, что это похоже.


Несколько ссылок, которые я выкопал: (отредактировал 1-ю ссылку из-за закрытия Codehaus).

Ответ 2

Если вы используете Spring Boot, вы можете установить следующее свойство в файле application.properties. spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = ложь

Ответ 3

Вы также можете получить такую ​​же проблему, если ваш класс не содержит общедоступных методов/свойств. Я обычно имею выделенные DTO для запросов и ответов API, объявленных публичными, но забыл в одном случае сделать общедоступными методы, что в первую очередь вызвало "пустой" bean.

Ответ 4

Вы также можете комментировать класс с помощью @JsonIgnoreProperties(ignoreUnknown=true), чтобы игнорировать поля undefined в классе

Ответ 5

Если вы хотите получить объект JSON без каких-либо дополнительных полей - пожалуйста, добавьте эту аннотацию в ваш класс, она отлично сработала для меня.

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

Вы также можете добавить в свой файл application.properties эту строку, но она добавит дополнительное поле в ваш JSON.

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

Ответ 6

В моем случае я пропустил запись аннотации @JsonProperty в одном из полей, которые вызывали эту ошибку.

Ответ 7

Если вы используете org.codehaus.jackson.map.ObjectMapper, тогда PLS. используйте следующие строки

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

Ответ 8

Добавление решения здесь для другой проблемы, но тот, который проявляется с той же ошибкой... Будьте осторожны при создании json на лету (как ответы api или что-то еще), чтобы избежать буквенных двойных кавычек в ваших членах строки. Вы можете потреблять свой собственный неправильный json.

Ответ 9

Чтобы решить эту проблему, настройте класс JsonDataFormat, как показано ниже

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

что почти эквивалентно,

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

Ответ 10

ObjectMapper mapper = new ObjectMapper();

Привет,

Когда я использую mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)

Мои значения объекта json становятся пустыми в значении угловой страницы в ответе

Решено с помощью только ниже настроек

mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));