免责声明:我无法确定问题代码为何无法正常工作,但可以重现该问题。 这个答案的确为我提供了另一种方法。
这 可能 是一个错误,因为我可以使用显式配置重现这两个问题:
<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功能已不推荐使用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)