JsonResultresult=newJsonResult();
result.setResultCode(1);
result.setData(userBo.getUserNum());
mm.addAttribute("result",result);
returnnewModelAndView(newMappingJackson2JsonView(),mm);
}乍一看好像不是什么大问题,Spring爱封装就让他封装,我们只要使用就好了,然而-------
我在前端用ajax成功的回调函数打出接收到的json数据,不看不知道,一看吓一跳
{ "userVo":{ "username":"1", "password":"123"}, "result":{ "resultCode":1, "resultMessage":"ajax成功", "data":1} }上次提交的密码赫然在列,也就是说Model在请求前后之间是保留传递的,虽然servlet中我们已经习惯了请求带参数转发给下个页面的模式,会对一些参数进行销毁,但是在springmvc中,很可能被框架本身的调试折腾的焦头烂额,从而忽略了这些细节
那么,怎么像servlet中的request.removeAttibute一样移除这个我们不想传递的user呢?
注意到在整个login方法中我并没有操作传入的参数model,这说明model的传输是由框架帮我们完成的,所以首先想到的是直接操作model,发现没有remove之类的方法,换个思路,对SpringMVC略有了解的同学应该知道Controller中的方法支持传入多种类型的参数,他们之间也是可以相互转换的,利用的原理就是Map,想到这一点,再看model的方法,其中有一个叫asMap(),问题就豁然开朗了,只需要在你想清除掉密码的位置加一行代码
model.asMap().remove("userVo");其中userVo是该函数传入的参数(UserVouser,*,*,*)的类型,这一点从前面的json数据也可以看出来
publicModelAndViewloginCheck(UserVouser,HttpServletRequestrequest,HttpServletResponseresponse,Modelmodel)SpringMVC利用利用反射,帮我们完成了表单提交过来的数据的封装,实在是方便,不过还是要记得及时处理不需要或不可传输的数据,以保证我们程序的安全和洁净,又要两点啦,开工,Fighting~~
本文内容总结:
原文链接:https://www.cnblogs.com/iny7/p/5271755.html