如何在Jackson中禁用fail_on_empty_beans?


100

使用杰克逊2.1,如何禁用fail_on_empty beans错误消息似乎要我禁用的消息?

我以为这只是世界上最简单的事情,但是该死了,而且太晚了,我还没有找到一个简单的教程或任何特别明显的东西apiSerializationFactory?他们为什么要使它如此直观,然后使错误消息看起来如此简单?

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

我假设有一种使用注释的方法-但是我根本不希望将它们用于我正在做的简单工作!

Answers:


125

我相信,您可以按班级或全球范围内进行此操作。

对于每个类,请尝试在类声明上方使用@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)

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

对于使用Jersey的REST,我不记得脑子顶了,但是我相信这是相似的。


我挖了几个链接:(由于Codehaus关闭,已编辑了第一个链接)。


我今天早些时候使用了此工具,它提供了更多信息,例如自动发现。stackoverflow.com/questions/4362104/…–
Pancakeo

1
您能举一个如何使用@JsonSerialize禁用FAIL_ON_EMPTY_BEANS类声明的例子吗?

2
已经几年了:)。这可能帮助:stackoverflow.com/questions/12162413/...
Pancakeo

或者,您可以使用ObjectMapper类的disable方法,例如“ mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)”
Reddeiah Pidugu

43

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


22

如果您的类不包含任何公共方法/属性,您也会遇到相同的问题。我通常有专用于API请求和响应的DTO,已声明为公共,但在某些情况下也忘记了将方法也公开-这首先导致了“空” bean。


13

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


1
如果整个bean实际上都为空,这将不起作用
maryoush

12

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

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

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

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

我试图从我的spring-boot REST应用程序中的一个控制器内部返回JSON,这对我来说已经修复了。
ninjasense

如果您有空物体,这是完美的方式!
Georgi Peev '19

3

如果您使用org.codehaus.jackson.map.ObjectMapper,则请。使用以下行

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

3

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

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


1

在此处为另一个问题添加解决方案,但是会出现相同的错误...在运行时构造json(作为api响应或其他方式)时要小心,以在字符串成员中转义文字双引号。您可能正在使用自己的格式错误的json。


1

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

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

几乎等于

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

0
ObjectMapper mapper = new ObjectMapper();

你好

当我使用 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)

我的json对象值变成''响应中的角度页面空白

仅在以下设置的帮助下解决

mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

0

就我而言,我不需要禁用它,而不得不将这段代码放在我的类之上:(这解决了我的问题)

    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)//this is what was added
    @Value //this was there already
    @Builder//this was there already

public class NameOfClass {
     //some code in here.
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.