我试图从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;
}

09-05 11:18