找不到使用 Json 的类的序列化程序

Posted

技术标签:

【中文标题】找不到使用 Json 的类的序列化程序【英文标题】:No serializer found for class using Json 【发布时间】:2019-06-19 14:13:21 【问题描述】:

我有一个基本的 SpringBoot 2.1.2.RELEASE 应用程序。使用 Spring Initializer、JPA、嵌入式 Tomcat、Thymeleaf 模板引擎,并将其打包为具有 Restful 架构的可执行 JAR

我有这个对象,我在 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】:

你还没有告诉 Jackson 如何序列化内部 Alarm 类。

Jackson 将尝试将其序列化为 bean(因此引用 BeanSerializer),但您尚未在 Alarm 上提供任何与 JavaBeans 兼容的 getter 方法。

您的选择是为 Alarm 编写自定义序列化程序,或添加一些公共 getter 方法,例如 getPercentage。

【讨论】:

【参考方案2】:

在实体类中使用这个注解。它解决了这个错误。

@JsonIgnoreProperties("hibernateLazyInitializer", "handler")

【讨论】:

以上是关于找不到使用 Json 的类的序列化程序的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 Java AWS 应用程序中找不到类的序列化程序

找不到类的 ScalaSig - json4s with scala + proguard for an android app

Spring Boot Jackson ResponseEntity 找不到类的序列化程序

在构建版本中找不到数据类 Kotlin 的序列化程序

如何正确地将 JSON 字符串反序列化为包含另一个类的嵌套列表的类

ruby 用于创建封装JSON序列化逻辑的类的简单模式。只需继承`BaseSerializer`并覆盖h