Spring 和杰克逊,如何通过@ResponseBody 禁用FAIL_ON_EMPTY_BEANS
Spring and jackson, how to disable FAIL_ON_EMPTY_BEANS through @ResponseBody
spring 中是否有全局配置可以禁用所有使用 @ResponseBody 注释的控制器的 spring FAIL_ON_EMPTY_BEANS?
您可以在配置时配置您的对象映射器configureMessageConverters
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter(mapper);
return converter;
}
如果您想知道如何在您的应用程序中准确执行操作,请使用您的配置文件(xml 或 java 配置)更新您的问题。
这是一个很好的article如何自定义消息转换器。
编辑: 如果您使用 XML 而不是 Java 配置,您可以创建自定义 MyJsonMapper
class使用自定义配置扩展 ObjectMapper
,然后按如下方式使用它
public class MyJsonMapper extends ObjectMapper {
public MyJsonMapper() {
this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
}
在你的 XML:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="jacksonObjectMapper" class="com.mycompany.example.MyJsonMapper" >
如果你使用Spring启动,你可以在application.properties文件中设置如下属性。
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
感谢@DKroot 的宝贵意见。但我相信这对其他人来说应该是它自己的答案。
如果你使用的是Spring Boot/JPA,你还得观察你是否使用的是
getOne(用于 jpa getReference )用于 findOne / enetiyManager.find(Clazz , id)
GetOne 依赖持久性缓存的 ID 引用,旨在检索其中只有 ID 的实体。它的用途主要是为了指示存在引用而无需检索整个实体。
find 方法直接指向持久性管理器以获取持久性实例。
第二个将相应地观察您注释 @JsonIgnore 并给您预期的结果。
// On entity...
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "foo")
private List<Foo> fooCollection;
// later on persistence impl
entityManager.find(Caso.class, id);
// or on serivce
casoRepository.findById(id); //...
在 spring boot 2.2.5
中找不到 spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
我用这个
@Configuration
public class SerializationConfiguration {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
}
对我来说,问题是从 org.json.JSONObject 对象到 org.json.simple.JSONObject 的类型转换,我解决了它通过解析 org.json.JSONObject 中的值,然后将其转换为用作 org.json.simple.JSONObject
JSONParser parser = new JSONParser();
org.json.simple.JSONObject xmlNodeObj = (org.json.simple.JSONObject) parser.parse(XMLRESPONSE.getJSONObject("xmlNode").toString());
spring 中是否有全局配置可以禁用所有使用 @ResponseBody 注释的控制器的 spring FAIL_ON_EMPTY_BEANS?
您可以在配置时配置您的对象映射器configureMessageConverters
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter(mapper);
return converter;
}
如果您想知道如何在您的应用程序中准确执行操作,请使用您的配置文件(xml 或 java 配置)更新您的问题。
这是一个很好的article如何自定义消息转换器。
编辑: 如果您使用 XML 而不是 Java 配置,您可以创建自定义 MyJsonMapper
class使用自定义配置扩展 ObjectMapper
,然后按如下方式使用它
public class MyJsonMapper extends ObjectMapper {
public MyJsonMapper() {
this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
}
在你的 XML:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="jacksonObjectMapper" class="com.mycompany.example.MyJsonMapper" >
如果你使用Spring启动,你可以在application.properties文件中设置如下属性。
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
感谢@DKroot 的宝贵意见。但我相信这对其他人来说应该是它自己的答案。
如果你使用的是Spring Boot/JPA,你还得观察你是否使用的是
getOne(用于 jpa getReference )用于 findOne / enetiyManager.find(Clazz , id)
GetOne 依赖持久性缓存的 ID 引用,旨在检索其中只有 ID 的实体。它的用途主要是为了指示存在引用而无需检索整个实体。
find 方法直接指向持久性管理器以获取持久性实例。
第二个将相应地观察您注释 @JsonIgnore 并给您预期的结果。
// On entity...
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "foo")
private List<Foo> fooCollection;
// later on persistence impl
entityManager.find(Caso.class, id);
// or on serivce
casoRepository.findById(id); //...
在 spring boot 2.2.5
中找不到spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
我用这个
@Configuration
public class SerializationConfiguration {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
}
对我来说,问题是从 org.json.JSONObject 对象到 org.json.simple.JSONObject 的类型转换,我解决了它通过解析 org.json.JSONObject 中的值,然后将其转换为用作 org.json.simple.JSONObject
JSONParser parser = new JSONParser();
org.json.simple.JSONObject xmlNodeObj = (org.json.simple.JSONObject) parser.parse(XMLRESPONSE.getJSONObject("xmlNode").toString());