問題:博主在寫代碼是遇到了一個比較尷尬的問題,在其他人上面都運行的好好的ajax代碼在自己的項目上面就怎么也收不到返回值。
$.ajax({ url:'loginAdd', type:'post', data:login, success:function(){ alert(111); } });
controller層
@RequestMapping(value="loginAdd",method=RequestMethod.POST) @ResponseBody//后來插入的代碼 public String add(Login login,Model m) { //loginService.save(login); return "redirect:/index.jsp"; }
經過一番努力查看到ajax通過post請求查看網絡響應發現,代碼有返回,但是返回的是一個視圖。所以到這個時候博主就更尷尬了,所以經過一番查閱資料:
發現在controller層方法的返回值因為配置MVC的原因導致:返回值是作為一個視圖的,而不是作為一個響應報文返回的。
經過查閱其他人的博客發現 加了 @ResponseBody 的就可以返回一個響應報文了。
所以博主加了
@ResponseBody
詳細解釋如下:
1.
@responseBody注解的作用是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML
數據,需要注意的呢,在使用此注解之后不會再走試圖處理器,而是直接將數據寫入到輸入流中,他的效果等同於通過response對象輸出指定格式的數據。
2、
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
User字段:userName pwd
那么在前台接收到的數據為:'{"userName":"xxx","pwd":"xxx"}'
效果等同於如下代碼:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
轉載至: https://www.cnblogs.com/qiankun-site/p/5774325.html
最終得出了一個結論:在ajax請求是將controller層的方法前加上@ResponseBody,就可以將方法返回的參數作為響應報文,而不是視圖界面
2
如果想不跳轉前端界面同樣是使用@ResponseBody 返回值使用void或者返回String類型的變量使用空字符就可以了,或者返回null
參考至: