Сериализация с Джексоном (JSON) - получение "Сериализатор не найден"? - PullRequest
230 голосов
/ 03 декабря 2011

Я получаю исключение при попытке сериализации очень простого объекта с использованием Джексона. Ошибка:

org.codehaus.jackson.map.JsonMappingException: не найден сериализатор для класс MyPackage.TestA и никаких свойств обнаружил, чтобы создать BeanSerializer (чтобы избежать исключения, отключите SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))

Ниже приведен простой класс и код для сериализации.

Может кто-нибудь сказать, почему я получаю эту ошибку?

public class TestA {
    String SomeString = "asd";
}

TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
    String testAString = om.writeValueAsString(testA); // error here!

    TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (JsonMappingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Ответы [ 14 ]

1 голос
/ 08 сентября 2018

SpringBoot2.0 resolve Я разрешаю его по следующему коду:

@Bean public ObjectMapper objectMapper() {
 return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);}
1 голос
/ 06 июля 2018

Я нашел по крайней мере три способа сделать это:

  1. Добавить public getters к вашей сущности, которую вы пытаетесь сериализовать;
  2. Добавить аннотацию вверху сущности, если вы не хотите public getters.Это изменит значение по умолчанию для Джексона с Visbility=DEFAULT на @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY), если допустимы любые модификаторы доступа;
  3. Измените ObjectMapper глобально, установив objectMapperInstance.setVisibility(JsonMethod.FIELD, Visibility.ANY);.Этого следует избегать, если вам не нужны эти функции в глобальном масштабе.

Выберите в зависимости от ваших потребностей.

1 голос
/ 03 мая 2017

У меня была похожая проблема с отложенной загрузкой через прокси-объект hibernate.Обошел его, аннотируя класс с лениво загруженными частными свойствами с помощью:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
0 голосов
/ 31 октября 2017

Хотя я добавил геттеры и сеттеры, я получал ту же ошибку.Позже я обнаружил ошибку, то есть по совету Сонара я включил геттеры и сеттеры как защищенные, что и вызвало проблему.Как только я установил, что это работает как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...