spring MVC ModelAndView 返回JSON 的问题

heihuzi007 发布于 2014/03/20 00:14
阅读 17K+
收藏 0
public class JsonView  extends AbstractView {

	@Override
	protected void renderMergedOutputModel(Map<String, Object> arg0,HttpServletRequest arg1, HttpServletResponse arg2) throws Exception {
		arg2.setContentType("text/json; charset=UTF-8");  
		PrintWriter out = arg2.getWriter();  
		Gson jb = new Gson(); 
		out.print(jb.toJson(arg0));  			
	}
	}
}

实现AbstractView,方法返回视图

@RequestMapping("randomCodeCheck")
 public ModelAndView randomCodeCheck() {
 CodeVo cv = new CodeVo();
 cv.setCode(CODE_0001);
 return new ModelAndView("jsonView").addObject("cc",cv);
 }

但是返回的json总是携带验证信息org.springfranework.validation...

{ 
org.springframework.validation.BindingResult.cc: 
{
target: 
{
code:  "0001" 
},
autoGrowNestedPaths:  true,
objectName:  "cc",
messageCodesResolver: 
{
prefix:  "" 
},
errors: [ ],
suppressedFields: [ ],
nestedPath:  "",
nestedPathStack: [ ]
},
cc: 
{
code:  "0001" 
}
}

页面展示json格式数据,为什么总是带着这个validation。。我没有添加这个属性啊?怎么去掉呀??

加载中
0
ihaolin
ihaolin
感觉你是配置了什么导致的,这些属性基本来自spring的这个类

AbstractBindingResult

0
yuyuyuyu
yuyuyuyu
你没加@result好像是这个,加了就没了
0
时间在追我
时间在追我
@ResponseBody
@RequestMapping("/reload")
public String reload() throws Exception {
	menuService.reload();
	return "success";
}



heihuzi007
heihuzi007
简单字符串返回没问题,只要是对象,就会携带验证信息...
0
ihaolin
ihaolin

的确,在spring的BindingAwareModelMap(该类放置ModelAndView的数据),当key为非String时,其中的target属性不会删除:

private void removeBindingResultIfNecessary(Object key, Object value) {
	if (key instanceof String) {
		String attributeName = (String) key;
		if (!attributeName.startsWith(BindingResult.MODEL_KEY_PREFIX)) {
			String bindingResultKey = BindingResult.MODEL_KEY_PREFIX + attributeName;
			BindingResult bindingResult = (BindingResult) get(bindingResultKey);
			if (bindingResult != null && bindingResult.getTarget() != value) {
				remove(bindingResultKey);
			}
		}
	}
}




heihuzi007
heihuzi007
额,,只能改源码么...难道没有取消验证的注解!..
0
ihaolin
ihaolin

不是,你也可以在方法上用@ResponseBody注解,说明该方法返回直接输出到Response响应对象输出对象out中,就不用返回视图,直接输出json串,也应该还有其他办法。

heihuzi007
heihuzi007
jskson结合@ResponseBody确实直接能返回json,我想着在返回的时候,将返回数据做其他处理再响应出去是,所以加了个视图,在里面处理,然后在out出去
0
大喵哥
大喵哥
直接fastjson+response就好了  不用modelandview
返回顶部
顶部