为了账号安全,请及时绑定邮箱和手机立即绑定

Spring配置@ResponseBody JSON格式

/ 猿问

Spring配置@ResponseBody JSON格式

UYOU 2019-12-17 14:48:02

想象一下,我在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);

有什么方法可以配置此行为?


查看完整描述

3 回答

?
慕姐829404

对于使用基于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 -来自fastxml。


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


查看完整回答
反对 回复 2019-12-17
?
繁星点点滴滴

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


我不想留下花哨的mvc:annotation-driven标签,所以我发现了如何配置杰克逊的ObjectMapper而不删除mvc:annotation-driven和不添加花哨的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>


查看完整回答
反对 回复 2019-12-17
?
慕仰8121524

AngerClown 向我指出了正确的方向。


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


<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);


查看完整回答
反对 回复 2019-12-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信