[求助] Spring4 MVC 返回json格式时候 设置不返回null值属性的问题
本帖最后由 bighong0404 于 -10-06 12:45:38 编辑
背景:
使用@responseBody设置以json格式返回数据时候.有时候被返回的对象有些属性是null值,默认还是会输出.例如下面代码.在与移动端交互时候会很浪费流量.
{
"fpassword":"sssssssss",
"favator":"",
"fbirthday":null,
"fcredType":null,
"fcredid":null,
"fregistedTime":null,
"fstate":1,
"flstate":1,
"fstatusMask":0,
"fstatusMask1":0,
"fcreateTime":1443260277000,
"fmodifyTime":1443260277000,
"fstandby0":null,
"fstandby1":null,
"fstandby2":null,
"fstandby3":null,
"fstandby4":null,
"fstandby5":null,
"fstandby6":null,
"fpassFlag":1,
"fquestion1":null,
"fanswer1":null,
"fquestion2":null,
"fanswer2":null,
"fregDeviceId":null,
"fregClientIp":null,
"fregChannel":null,
"fpassModifyTime":null
}
有两种方法设置不返回null值属性.
1.在被返回的对象例如User类,添加注解@JsonInclude(Include.NON_NULL)即可.在spring4.1.6,jackson-databind2.5.1版本亲测有效
spring使用的是fasterxml.jackson组件解析对象.因此依赖一下包..
com.fasterxml.jackson.core
jackson-databind
2.5.1
问题来了!!第二种方法:
2.springmvc配置文件,
查看API文件,发现com.fasterxml.jackson.databind.ObjectMapper有一下方法,而JsonInclude.Include枚举类有个值:NON_NULL(感觉应该和方法1的注解是同一个),
publicObjectMappersetSerializationInclusion(JsonInclude.Includeincl){
_serializationConfig=_serializationConfig.withSerializationInclusion(incl);
returnthis;
}
因此对jackson的objectMapper设置属性
NON_NULL
最后就是这样:
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
NON_NULL
application/json;charset=UTF-8
但测试过还是无效.....
也尝试了自己写子类继承com.fasterxml.jackson.databind.ObjectMapper.
publicclassCustomObjectMapperextendsObjectMapper{
privatestaticfinallongserialVersionUID=3072523733092288622L;
publicCustomObjectMapper(){
super.setDateFormat(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"));
super.getSerializationConfig().withSerializationInclusion(
JsonInclude.Include.NON_NULL);
}
}
然后注入到上诉代码被注释的地方替换com.fasterxml.jackson.databind.ObjectMapper..还是无用....
求助哪位大神能帮忙解答一下....明显第二种方法优于第一种.....但苦于无效...
------解决思路----------------------
思路覆盖默认的MappingJacksonHttpMessageConverter。
重载MappingJacksonHttpMessageConverter,提供配置排除null值:
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
static-field="org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL"/>