Не найден сериализатор для класса, использующего Json - PullRequest
0 голосов
/ 25 января 2019

У меня есть базовое приложение SpringBoot 2.1.2.RELEASE.Используя Spring Initializer, JPA, встроенный Tomcat, шаблонизатор Thymeleaf и пакет в качестве исполняемого JAR с архитектурой restful

У меня есть этот объект, который я возвращаю в RestMethod:

public class MenuAlarm {



    /**
     * 
     */
    public MenuAlarm() {
        super();
    }


    /**
     * 
     */
    public MenuAlarm(Menu menu) {

        this.menuAlias = menu.getName();
        this.menuId = menu.getId();

        menu
            .getAlerts()
            .forEach(a -> alarms.add(new Alarm(a)));

    }

    class Alarm {

        public Alarm(MenuAlert menuAlert) {

            this.percentage = menuAlert.getPercentage();

            if (menuAlert.getCriteria() > 1) {
                this.increase = true;
            } else {
                this.increase = false;
            }
            this.enabled = menuAlert.isEnabled();
        }

        public Alarm() {
            super();
        }

        Integer percentage;

        boolean increase;

        boolean enabled;

    }

    String menuAlias;

    Long menuId;

    List<Alarm> alarms = new ArrayList<Alarm>();

    public String getMenuAlias() {
        return menuAlias;
    }

    public void setMenuAlias(String menuAlias) {
        this.menuAlias = menuAlias;
    }

    public Long getMenuId() {
        return MenuId;
    }

    public void setMenuId(Long menuId) {
        this.menuId = menuId;
    }

    public List<Alarm> getAlarms() {
        return alarms;
    }

    public void setAlarms(List<Alarm> alarms) {
        this.alarms = alarms;
    }
}

, нокогда я возвращаю результат, я получаю эту ошибку:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.tdk.api.json.MenuAlarm$Alarm and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.tdk.api.json.UserAlerts[“menuAlarms"]->java.util.ArrayList[0]->com.tdk.api.json.MenuAlarm["alarms"]->java.util.ArrayList[0])`

1 Ответ

0 голосов
/ 25 января 2019

Вы не сказали Джексону, как сериализовать внутренний класс Alarm.

Джексон попытается сериализовать его как бин (таким образом, ссылка на BeanSerializer), но вы не предоставили JavaBeans-совместимыйМетоды получения для Alarm.

Вы можете либо написать собственный сериализатор для Alarm, либо добавить некоторые общедоступные методы получения, такие как getPercentage.

...