Как отключить 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));