Spring MVC 3.2和JSON ObjectMapper问题

Spring MVC 3.2和JSON ObjectMapper问题,第1张

Spring MVC 3.2和JSON ObjectMapper问题

免责声明:我无法确定问题代码为何无法正常工作,但可以重现该问题。 这个答案的确为我提供了另一种方法。

可能 是一个错误,因为我可以使用显式配置重现这两个问题:

<bean id="jacksonObjectMapper" /><bean >   <property name="objectMapper" ref="jacksonObjectMapper"/>   <property name="supportedMediaTypes" value="application/json"/></bean>

并通过 mvc:message-converter

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">    <mvc:message-converters>        <bean > <property name="objectMapper" ref="jacksonObjectMapper" />        </bean>   </mvc:message-converters></mvc:annotation-driven>

{"foo":null,"bar":"bar"}
使用示例类时,两者都给我

演示程序

import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.prehaus.jackson.annotate.JsonProperty;@Controller@RequestMapping("/data")public class Data {    @RequestMapping    @ResponseBody    public Dummy dataIndex() {        return new Dummy();    }    public class Dummy {        String foo = null;        @JsonProperty        public String foo() { return foo;        }        String bar = "bar";        @JsonProperty        public String bar() { return bar;        }    }}

但是,我本以为 mvc:message-converter 方法会起作用,只是因为我看到了一些问题,这些问题覆盖了

<mvc:annotation-driven/>
执行的默认bean注册(请参阅Web MVC
framework
),并且首选使用嵌套配置(?)。

也许Jackson 2的支持导致了Jackson 1的一些向后兼容性问题?

然而,切换到MappingJackson2HttpMessageConverter(在Spring
3.1.2和Spring 3.2的支持),我 能够改变ObjectMapper配置不写入空值,敷JSON输出…
使用内部的配置,只有当

<mvc:message-converters/>


我得到

{"Dummy":{"bar":"bar"}}
以下更改:

pom.xml

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

CustomJacksonObjectMapper.java

import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.SerializationFeature;import static com.fasterxml.jackson.annotation.JsonInclude.*;public class CustomJacksonObjectMapper extends ObjectMapper {public CustomJacksonObjectMapper() {    super();    this.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);    this.configure(SerializationFeature.WRAP_ROOT_VALUE, true);    this.setSerializationInclusion(Include.NON_NULL);   }}

Demo.java 切换到Jackson 2的新包结构

import com.fasterxml.jackson.annotation.JsonProperty;

demo-servlet.xml

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">    <mvc:message-converters>        <bean > <property name="objectMapper" ref="jacksonObjectMapper" />        </bean>    </mvc:message-converters></mvc:annotation-driven>

最后,根据

SerializationConfig.Feature
文档,该
WRITE_NULL_PROPERTIES
功能已不推荐使用SerializationConfig.setSerializationInclusion()



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5441851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存