如何在Jackson中禁用fail_on_empty_beans?

153
使用jackson 2.1,我该如何禁用错误消息要求我禁用的fail_on_empty beans?我假设这只是世界上最简单的事情之一,但现在时间很晚了,我找不到一个简单的教程或者从api中找到任何特别明显的东西。 SerializationFactory? 他们为什么要让它变得如此不直观,并使错误消息看起来非常简单明了呢?虽然我确实喜欢这个错误消息,我的意思是,它比NPE更好。我假设有一种方法可以使用注释来完成这个操作 - 但对于我正在进行的简单工作,我不想使用它们!
15个回答

175
你可以按类别或全局来执行此操作,我相信。
对于按类别,尝试在类声明上方使用@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关闭,第一个链接进行了编辑)。


我今天早些时候使用了这个,它有更多的信息,例如自动发现。https://dev59.com/K2855IYBdhLWcg3wZzff - Pancakeo
1
你能举个例子说明如何在类声明中使用@JsonSerialize来禁用FAIL_ON_EMPTY_BEANS吗? - tuk
2
已经过了几年:)。这可能会有所帮助:https://dev59.com/7mct5IYBdhLWcg3wV8Ck - Pancakeo
或者您可以使用ObjectMapper类的disable方法,例如“mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)”。 - R Pidugu

90

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


是的。已解决。 - Ojonugwa Jude Ochalifu
运行得非常好! - dyon048
3
不适用于Spring Boot 2.7.5。 - Radhesh Khanna

29

如果您希望获取不带任何额外字段的JSON对象,请将此注释添加到您的类中,这对我非常有效。

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

您也可以在application.properties文件中添加这一行,但这会在您的JSON中添加一个额外的字段。

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

我尝试从我的Spring Boot REST应用程序中的一个控制器内返回JSON,这个方法为我解决了问题。 - ninjasense
如果您有一个空对象,这是完美的方法! - Georgi Peev

26

如果您的类没有包含任何公共方法或属性,也会遇到相同的问题。我通常会为API请求和响应专门创建DTO,声明为public,但在某些情况下可能会忘记同时将方法也声明为public,这就导致了第一个bean为空的情况。


11

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


6
如果整个豆子实际上是 null,这将不起作用。 - maryoush

7
在Jersey Rest Services中,只需要使用JacksonFeatures注解即可...
@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
    Object entity = doSomething();
    return Response.ok(entity).build();
}

6
我不完全理解这个异常的原因,但对于Spring Boot项目,将以下内容添加到属性文件中非常有效:
application.yml
spring:
  jackson:
   serialization:
     FAIL_ON_EMPTY_BEANS: false

application.properties

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false

5
为了解决这个问题,您需要按照下面的方式配置您的JsonDataFormat类。
ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

这句话的意思是几乎等同于:
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

3
如果您使用org.codehaus.jackson.map.ObjectMapper,请使用以下代码:
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

3
在我的情况下,我错过了在其中一个字段中写入@JsonProperty注释,这导致了这个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接