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

use*_*555 30 spring jackson

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

use*_*607 60

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

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

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

  • 好的提示,但要注意它不能与HAL一起工作,因为Spring HATEOAS构建了自己的对象映射器.https://github.com/spring-projects/spring-hateoas/issues/333 (5认同)

vto*_*tor 32

您可以在配置时配置对象映射器 configureMessageConverters

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    MappingJackson2HttpMessageConverter converter = 
        new MappingJackson2HttpMessageConverter(mapper);
    return converter;
}
Run Code Online (Sandbox Code Playgroud)

如果您想知道如何在您的应用程序中完全执行,请使用您的配置文件(xml或java配置)更新您的问题.

这是一篇如何自定义消息转换器的好文章.

编辑:如果您使用的是XML而不是Java配置,则可以创建使用自定义配置MyJsonMapper扩展的自定义类ObjectMapper,然后按如下方式使用它

public class MyJsonMapper extends ObjectMapper {    
        public MyJsonMapper() {
            this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        }
}
Run Code Online (Sandbox Code Playgroud)

在您的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" >
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是Spring Boot,则可以执行以下操作:`spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false` (22认同)

Evo*_*Rof 9

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false在 Spring Boot 2.2.5 中找不到

我用这个

@Configuration
public class SerializationConfiguration {
    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    }
}
Run Code Online (Sandbox Code Playgroud)