我试图从doc上了解何时发生空bean失败:
公共静态最终序列化功能FAIL_ON_EMPTY_BEANS
一种功能,用于确定在找不到类型的访问器时会发生什么(没有注释指示要序列化该类型)。如果启用(默认),则将引发异常以指示这些类型为不可序列化的类型;如果禁用,它们将序列化为空对象,即没有任何属性。
请注意,此功能仅对那些没有任何可识别注释的“空” bean(例如@JsonSerialize)起作用的空类型:具有注释的那些不会导致引发异常。
默认情况下启用此功能。
现在,我尝试创建一个空的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,我也总是使包装器序列化。任何人都可以解释何时会发生错误?
最佳答案
您需要将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;
}