最近项目使用springmvc,用的是4.0.5版本,在controller里面要做JSON输出,使用springmvc的自动转换来做,示例代码如:
结果在返回404,500错误,后台没有打印错误,网上找了一下,和这个错误类似:
http://blog.zhaoimpulse.com/web/springmvc-exception/,同样根据文章介绍配置了一下自定义exceptionHandler,可以打印出错误:
在网上找了一圈,找了一些资料
http://www.cnblogs.com/yangy608/p/3936848.html
http://my.oschina.net/fornews/blog/358014
http://blog.csdn.net/sdyy321/article/details/40298081
看应该可以通过设置配置参数来过滤,参考资料通过各种方式来设置参数,各种姿势啊。。。结果没有效果 :cry:
害我以为是不是这个版本的SPRINGMVC,JACKSON有问题啊。
后来写了个main方法,跟了下代码才发现问题所在
发现JAVA对象转为JSON对象时,null的值会被转为JSONNull对象,所以导致限制null的配置不生效,而JACKSON又转不了JSONNull。
解决就是直接用JAVA对象:
写在最后,困扰了几天解决了还是很高兴,看来以后使用JACKSON转的时候还是尽量直接使用JAVA对象。
@ResponseBody
@RequestMapping("/getBeans")
public JSONObject getBeans(@RequestParam int id) {
JSONObject obj = new JSONObject();
Bean bean = new Bean();
bean.setAa("adfa");
bean.setLastUpdatetime(null);
obj.put("bean", bean);
return obj;
}
结果在返回404,500错误,后台没有打印错误,网上找了一下,和这个错误类似:
http://blog.zhaoimpulse.com/web/springmvc-exception/,同样根据文章介绍配置了一下自定义exceptionHandler,可以打印出错误:
com.fasterxml.jackson.databind.JsonMappingException: Object is null (through reference chain: net.sf.json.JSONObject["bean"]->net.sf.json.JSONObject["lastUpdatetime"]->net.sf.json.JSONNull["empty"])
错误是因为对象里面有个Date类型字段为NULL,但是文章没有提到怎么解决。
在网上找了一圈,找了一些资料
http://www.cnblogs.com/yangy608/p/3936848.html
http://my.oschina.net/fornews/blog/358014
http://blog.csdn.net/sdyy321/article/details/40298081
看应该可以通过设置配置参数来过滤,参考资料通过各种方式来设置参数,各种姿势啊。。。结果没有效果 :cry:
害我以为是不是这个版本的SPRINGMVC,JACKSON有问题啊。
后来写了个main方法,跟了下代码才发现问题所在
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
System.out.println(mapper.writeValueAsString(obj));
发现JAVA对象转为JSON对象时,null的值会被转为JSONNull对象,所以导致限制null的配置不生效,而JACKSON又转不了JSONNull。
解决就是直接用JAVA对象:
@ResponseBody
@RequestMapping("/getBeans")
public Map getBeans(@RequestParam int id) {
}
写在最后,困扰了几天解决了还是很高兴,看来以后使用JACKSON转的时候还是尽量直接使用JAVA对象。