java Spring配置@ResponseBody JSON格式
假设我在Spring3@控制器中有这个带注释的方法
@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);
有没有办法配置此行为
我发现了几个相关的问题,但我不确定如何使它们适应我的具体情况:
谢谢大家!
# 1 楼答案
适用于Spring版本4.1.3+
我尝试了Jama的解决方案,但所有的响应都返回了“application/json”内容类型,包括主生成的HTML页面
重写
configureMessageConverters(...)
会阻止spring设置默认转换器。Spring 4.1.3允许修改已配置的转换器,方法是覆盖以下内容:# 2 楼答案
春天。2,新的解决方案是由:http://static.springsource.org/spring/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.html, 下面是我的例子:
# 3 楼答案
把pointed me移到正确的方向
这就是我最后做的,以防有人觉得有用
我仍然需要弄清楚如何配置其他属性,例如:
# 4 楼答案
我需要解决非常类似的问题,那就是将Jackson Mapper配置为“看在上帝的份上不要序列化空值!!!”
我不想留下花哨的mvc:annotation-driven标签,所以我找到了如何在不删除mvc:annotation-driven和添加不太花哨的ContentNegotingViewResolver的情况下配置Jackson的ObjectMapper
最美妙的是,你不必自己编写任何Java代码
这里是XML配置(不要与Jackson类的不同名称空间混淆,我只是使用了新的Jakson 2.x库……同样的配置也适用于Jackson 1.x库):
# 5 楼答案
对于使用基于Java的Spring配置的用户:
我使用的是来自fasterxml的
MappingJackson2HttpMessageConverter
如果你想使用codehaus-jackson映射器,可以使用这个
MappingJacksonHttpMessageConverter
# 6 楼答案
我编写了自己的FactoryBean,它实例化了一个ObjectMapper(简化版):
以及spring配置中的用法: