spring.jackson.serialization.fail-on-empty-beans
Posted
技术标签:
【中文标题】spring.jackson.serialization.fail-on-empty-beans【英文标题】: 【发布时间】:2019-05-27 10:19:11 【问题描述】:我试图了解空 bean 何时发生故障,来自文档:
public static final SerializationFeature FAIL_ON_EMPTY_BEANS 确定在没有找到类型的访问器时会发生什么的功能(并且没有注释表明它应该被序列化)。如果启用(默认),则抛出异常以指示这些为不可序列化类型;如果禁用,它们将被序列化为空对象,即没有任何属性。 请注意,此功能仅对那些没有任何可识别注释(如@JsonSerialize)的“空”bean 产生影响的空类型:具有注释的空类型不会导致抛出异常。
功能默认启用。
现在我尝试创建一个空 POJO(没有 getters):
@Component
public class Wrapper2
private String name;
我要序列化的包装类:
@Component
public class Wrapper
@Autowired
private Wrapper2 wrapper2;
控制器:
@RestController
public class TestController
@Autowired
private Wrapper wrapper;
@GetMapping("/test")
public Wrapper test()
return wrapper;
但是,即使添加/删除 wrapper2 的 getter 和 setter,我也总是会序列化包装器。谁能解释一下什么时候会发生错误?
【问题讨论】:
空豆在哪里? @user7294900 根据文档,任何没有访问器的“在找不到类型的访问器时发生”我没有wrapper
和 wrapper2
的吸气剂
【参考方案1】:
您需要您的 bean 为空并且没有可识别的注释
请注意,此功能仅对那些没有任何可识别注释的“空”bean 产生影响的空类型
因此,如果您删除注释,它将失败
public class Wrapper
错误将是
Unrecognized field "wrapper" (class com.Wrapper ), not marked as ignorable (0 known properties: ])
Jackson标记为UnknownSerializer
时应用的相关代码:
if (isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)) if (ser instanceof UnknownSerializer) return true;
嵌套空类的类似异常:
public class Wrapper
private Wrapper2 wrapper2;
【讨论】:
以上是关于spring.jackson.serialization.fail-on-empty-beans的主要内容,如果未能解决你的问题,请参考以下文章