如何在Jackson中禁用fail_on_empty_beans?

时间:2013-03-07 01:28:27

标签: java jackson

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

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

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

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

13 个答案:

答案 0 :(得分:98)

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

对于每个类,请在类声明上面尝试@JsonSerialize。

对于mapper,这是一个例子:

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关闭而编辑的第一个链接)。

答案 1 :(得分:18)

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

答案 2 :(得分:16)

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

答案 3 :(得分:11)

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

答案 4 :(得分:4)

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

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

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

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

答案 5 :(得分:4)

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

在这里为一个不同的问题添加一个解决方案,但是一个表现出相同错误的解决方案......在构建json时(作为api响应或其他),要小心,以避免字符串成员中的文字双引号。你可能正在消耗自己畸形的json。

答案 9 :(得分:1)

解决此问题如下配置您的JsonDataFormat类 ObjectMapper mapper = new ObjectMapper();  mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

答案 10 :(得分: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));

答案 11 :(得分: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.
}

答案 12 :(得分: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;
        }