Spring和jackson,如何通过@ResponseBody禁用FAIL_ON_EMPTY_BEANS

时间:2015-03-04 18:49:13

标签: spring jackson

春天是否有全局配置可以为所有使用@ResponseBody注释的控制器禁用弹簧FAIL_ON_EMPTY_BEANS?

5 个答案:

答案 0 :(得分:50)

如果您使用的是Spring Boot,则可以在application.properties文件中设置以下属性。

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

感谢@DKroot的宝贵评论。但我相信这应该是其他人的答案。

答案 1 :(得分:29)

您可以在配置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的自定义ObjectMapper类,然后按如下方式使用< / p>

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" >

答案 2 :(得分:4)

在春季靴2.2.5中找不到<div id="backinblack"> <h1 data-text="test">test</h1> </div>

我用这个

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

答案 3 :(得分:0)

如果您正在使用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); //...

答案 4 :(得分:0)

对我来说,问题在于从 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());