使用jackson 2.1,如何禁用fail_on_empty beans
错误消息似乎要我禁用?
我假设这只是世界上最简单的事情,但是已经晚了,我还没有找到简单的教程或任何从api
. SerializationFactory
? 为什么他们会让它变得如此不直观,然后让错误消息看起来如此简单?
尽管我确实喜欢错误消息,但我的意思是,它比 NPE 更好。
我假设有一种方法可以使用注释来做到这一点 - 但我根本不热衷于将它们用于我正在做的简单工作!
我相信你可以在每个班级或全球范围内做到这一点。
对于每个类,请尝试上面的类声明 @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 关闭,编辑了第一个链接)。
如果您使用的是 Spring Boot,您可以在 application.properties 文件中设置以下属性。
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
如果您的类不包含任何公共方法/属性,您也会遇到同样的问题。我通常有专门的 DTO 用于 API 请求和响应,声明为公共的,但在一种情况下忘记将方法也公开 - 这首先导致了“空”bean。
如果您希望在没有任何额外字段的情况下获取 JSON 对象 - 请将此注释添加到您的课程中,它对我来说非常适合。
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
你也可以在你的 application.properties 文件中添加这一行,但它会在你的 JSON 中添加一个额外的字段。
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
您也可以注释类@JsonIgnoreProperties(ignoreUnknown=true)
以忽略类中未定义的字段
在 Jersey Rest Services 中,只需使用 JacksonFeatures 注释......
@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
Object entity = doSomething();
return Response.ok(entity).build();
}
就我而言,我错过了在导致此错误的字段之一中编写 @JsonProperty 注释。
如果您使用 org.codehaus.jackson.map.ObjectMapper,那么请。使用以下几行
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
要解决此问题,请配置您的 JsonDataFormat 类,如下所示
ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
这几乎等同于,
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
在此处为不同的问题添加解决方案,但出现相同的错误...在动态构建 json(作为 api 响应或其他)时要小心,以转义字符串成员中的文字双引号。您可能正在使用自己的格式错误的 json。
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));
我不完全理解这个异常背后的原因,但是对于 Spring Boot 项目,将以下内容添加到属性文件中是一种享受
应用程序.yml
spring:
jackson:
serialization:
FAIL_ON_EMPTY_BEANS: false
应用程序属性
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false
就我而言,我不需要禁用它,而是必须将此代码放在我的班级之上:(这解决了我的问题)
@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.
}
如果是 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;
}