Spring配置@ResponseBody JSON格式

想象一下,我在Spring 3 @Controller中拥有这个注解的方法

@RequestMapping("")
public @ResponseBody MyObject index(@RequestBody OtherObject obj) {
    MyObject result = ...;
    return result;
}

但我需要配置输出json格式,就像我在做:

ObjectMapper om = new ObjectMapper();
om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);
om.getSerializationConfig()
        .setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
om.getSerializationConfig()
        .set(SerializationConfig.Feature.INDENT_OUTPUT, false);

有什么办法可以配置这种行为吗?

我发现了一些相关的问题,但我不确定如何使它们适应我的具体情况:

  • spring responsejson与responsebody
  • 谁在S​​pring MVC中设置响应内容类型(@ResponseBody)
  • 谢谢 !


    对于那些使用基于Java的Spring配置的人

    @Configuration
    @ComponentScan(basePackages = "com.domain.sample")
    @EnableWebMvc
    public class SpringConfig extends WebMvcConfigurerAdapter {
    ....
    
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
            final ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            converter.setObjectMapper(objectMapper);
            converters.add(converter);
            super.configureMessageConverters(converters);
        }
    
    ....
    
    }
    

    我使用MappingJackson2HttpMessageConverter -这是从fasterxml。

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.3.1</version>
    </dependency>
    

    如果您想使用codehaus-jackson映射器,请使用这一个MappingJacksonHttpMessageConverter

     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${codehaus.jackson.version}</version>
     </dependency>
    

    我需要解决非常类似的问题,即将Jackson Mapper配置为“不要为基于目的而序列化空值!!!”。

    我不想留下mvc:annotation-driven标签,所以我发现,如何配置Jackson的ObjectMapper而不移除mvc:annotation驱动,并且不会添加真正的花式ContentNegotiatingViewResolver。

    美丽的是你不必自己编写任何Java代码!

    这里是XML配置(不要与Jackson类的不同命名空间混淆,我只是使用新的Jakson 2.x库...同样应该可以与Jackson 1.x库一起使用):

    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="serializationInclusion">
                            <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
                        </property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    

    愤怒的小丑指出我正确的方向。

    这是我最终做的,以防万一有人发现它有用。

    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                    <property name="objectMapper" ref="jacksonObjectMapper" />
                </bean>
            </list>
        </property>
    </bean>
    
    <!-- jackson configuration : https://stackoverflow.com/questions/3661769 -->
    <bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />
    <bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig"
        factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" />
    <bean
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" ref="jacksonSerializationConfig" />
        <property name="targetMethod" value="setSerializationInclusion" />
        <property name="arguments">
            <list>
                <value type="org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion">NON_DEFAULT</value>
            </list>
        </property>
    </bean>
    

    我仍然需要弄清楚如何配置其他属性,例如:

    om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);
    
    链接地址: http://www.djcxy.com/p/48457.html

    上一篇: Spring configure @ResponseBody JSON format

    下一篇: Spring 3 JSON with MVC