如何在Jackson中禁用fail_on_empty_beans?

bha*_*ral 86 java jackson

使用jackson 2.1,如何禁用fail_on_empty beans错误消息似乎要我禁用?

我认为这只是世界上最简单的事情,但是现在已经很晚了,我还没能找到一个简单的教程或任何特别明显的教程api.SerializationFactory?为什么他们会让它变得如此不直观,然后使错误信息看起来如此简单?

虽然我喜欢的错误讯息,我的意思是,它比NPE更好.

我假设有一种方法可以使用注释来实现这一点 - 但我并不热衷于使用它们来完成我正在做的简单工作!

Pan*_*keo 107

我相信你可以在每个班级或全球范围内做到这一点.

对于每个类,请在类声明上方尝试@JsonSerialize.

对于映射器,这是一个例子:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// do various things, perhaps:
String someJsonString = mapper.writeValueAsString(someClassInstance);
SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)
Run Code Online (Sandbox Code Playgroud)

下面的StackOverflow链接也有一个Spring项目的示例.

对于带泽西岛的REST,我不记得我的头顶,但我相信它是相似的.


我挖出的几个链接:(由于Codehaus关闭而编辑的第一个链接).

  • 已经几年了:).这可能帮助:http://stackoverflow.com/questions/12162413/jackson-use-jsonserialize-inclusion-non-null-except-for-one-class (2认同)

小智 27

如果您使用的是Spring Boot,则可以在application.properties文件中设置以下属性.spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = FALSE

  • 在 Spring Boot 2.7.5 中不起作用 (3认同)

RJS*_*ord 21

如果您的类不包含任何公共方法/属性,您也可以获得相同的问题.我通常有专门的API请求和响应的DTO,声明为公开,但在一个案例中忘记了使方法公开 - 这首先导致了"空"bean.


All*_*ing 12

您也可以使用@JsonIgnoreProperties(ignoreUnknown=true)忽略类中未定义的字段来注释该类

  • 如果整个 bean 实际上为 null,这将不起作用 (2认同)

小智 7

在 Jersey Rest Services 中,只需使用 JacksonFeatures 注释...

@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
    Object entity = doSomething();
    return Response.ok(entity).build();
}
Run Code Online (Sandbox Code Playgroud)


小智 6

要解决此问题,请配置您的 JsonDataFormat 类,如下所示

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
Run Code Online (Sandbox Code Playgroud)

这几乎相当于:

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
Run Code Online (Sandbox Code Playgroud)


use*_*615 6

如果您希望获取不带任何其他字段的JSON对象-请将此注释添加到您的类中,它对我来说非常理想。

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
Run Code Online (Sandbox Code Playgroud)

您还可以在application.properties文件中添加此行,但是它将为JSON添加一个额外的字段。

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
Run Code Online (Sandbox Code Playgroud)


小智 6

我不完全理解这个异常背后的原因,但是对于 Spring Boot 项目来说,将以下内容添加到属性文件中是一种享受

应用程序.yml

spring:
  jackson:
   serialization:
     FAIL_ON_EMPTY_BEANS: false
Run Code Online (Sandbox Code Playgroud)

应用程序属性

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false
Run Code Online (Sandbox Code Playgroud)