找不到使用 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 的类的序列化程序的主要内容,如果未能解决你的问题,请参考以下文章
找不到类的 ScalaSig - json4s with scala + proguard for an android app
Spring Boot Jackson ResponseEntity 找不到类的序列化程序