123

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

我假设这只是世界上最简单的事情,但是已经晚了,我还没有找到简单的教程或任何从api. SerializationFactory? 为什么他们会让它变得如此不直观,然后让错误消息看起来如此简单?

尽管我确实喜欢错误消息,但我的意思是,它比 NPE 更好。

我假设有一种方法可以使用注释来做到这一点 - 但我根本不热衷于将它们用于我正在做的简单工作!

4

14 回答 14

146

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

对于每个类,请尝试上面的类声明 @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 关闭,编辑了第一个链接)。

于 2013-03-07T02:20:10.533 回答
67

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

于 2018-08-02T09:28:15.377 回答
25

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

于 2014-01-07T13:18:57.200 回答
21

如果您希望在没有任何额外字段的情况下获取 JSON 对象 - 请将此注释添加到您的课程中,它对我来说非常适合。

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

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

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
于 2018-12-19T06:07:30.327 回答
13

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

于 2015-04-13T22:25:16.807 回答
6

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

@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
    Object entity = doSomething();
    return Response.ok(entity).build();
}
于 2020-03-09T12:18:16.320 回答
3

就我而言,我错过了在导致此错误的字段之一中编写 @JsonProperty 注释。

于 2015-07-20T12:21:48.637 回答
3

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

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
于 2016-01-12T12:46:10.243 回答
3

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

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

这几乎等同于,

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
于 2018-03-12T12:53:43.517 回答
1

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

于 2016-12-05T01:48:30.160 回答
1
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));
于 2018-09-18T14:32:02.223 回答
1

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

应用程序.yml

spring:
  jackson:
   serialization:
     FAIL_ON_EMPTY_BEANS: false

应用程序属性

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false
于 2021-12-10T07:33:01.227 回答
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.
}
于 2020-07-22T10:39:35.253 回答
0

如果是 Spring App,只需将代码粘贴到 config 类中即可

        @Bean
        public ObjectMapper getJacksonObjectMapper() {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.findAndRegisterModules();
            objectMapper.configure(
                    com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            return objectMapper;
        }
  
于 2021-01-27T11:24:01.003 回答