@RequestMapping("toSpringMVCDemo")
public String toSpringMVCDemo() {
return "demo/springMVCDemo";
}
实际上该方法不需要任何参数,例如
使用ModelAndView,方法参数内加入ModelAndView
modelAndView.addObject可加入任意返回前台的数据
modelAndView.setViewName 设置跳转的界面
/**
* 带数据返回的页面跳转
*/
@RequestMapping(value = "toSpringMVCDemoWithReturn", method = RequestMethod.POST)
public ModelAndView toSpringMVCDemoWithReturn(ModelAndView modelAndView) {
modelAndView.addObject("name", "姓名");
modelAndView.addObject("sex", "性别");
modelAndView.addObject("message", "返回界面的任意信息");
modelAndView.setViewName("demo/springMVCDemoWithReturn");
return modelAndView;
}
同样的,该方法也不需要HttpServletRequest,HttpServletResponse。
实际上,基于spring-mvc的优秀封装,我们可以在绝大多数情况下摆脱原始的HttpServletRequest和HttpServletResponse
使用spring-mvc为我们封装好的方式,更优雅的完成功能
三、JSON请求
3.1 前台
一般使用$.post实现,而不使用$.ajax除非有特殊的要求
引用于w3school
ajax() 方法通过 HTTP 请求加载远程数据。function springMVCReturnJSON() {
// 一般使用简单易用的高层实现 $.get, $.post等
// 大多数情况下你无需直接操作$.ajax函数,除非你需要操作不常用的选项,以获得更多的灵活性
$.post("springMVCReturnJSON", {
"param1" : "param1的值",
"param2" : "param2的值"
}, function(data, status) {
console.log(data);
console.log(status);
});
}
此处function成功函数中不再需要对status和data中的success进行判断,只需要写正常的逻辑即可
具体参考“[Spring-MVC] 3 异常统一处理”
3.2后台
/**
* 使用POST请求JSON数据展示
*/
@RequestMapping("springMVCReturnJSON")
@ResponseBody
public Map springMVCReturnJSON(@RequestParam("param1") String param1,
@RequestParam("param2") String param2) throws IOException, SchedulerException {
Map result = new HashMap();
result.put("success", true);
List list = new ArrayList();// 模拟列表返回
list.add("a");
list.add("b");
list.add("c");
result.put("total", list.size());
result.put("rows", list);
return result;
}
只需要加上@ResponseBody即可
可参考“[Spring-MVC] 1 JSON格式问题”
四、前台向后台传递参数的几种方法
4.1、使用@RequestParam向后台传递参数
/**
* 使用@RequestParam向后台传递参数
*/
@RequestMapping("springMVCRequestParam1")
@ResponseBody
public Map springMVCRequestParam1(@RequestParam("param1") String param1,
@RequestParam(value = "param2", required = false) String param2) {
logger.info(param1);
logger.info(param2);
Map result = new HashMap();
result.put("success", true);
return result;
}
适用于参数不多的情况,使用此方法注意如果前台传递的参数param1为空值,会报错
如果期望参数可选,则需要使用 required = false,例如:
@RequestParam(value = "param2", required = false) String param2
4.2、使用@ModelAttribute 以对象的方式向后台传递参数
/**
* 使用@ModelAttribute 以对象的方式向后台传递参数
*/
@RequestMapping("springMVCRequestParam2")
@ResponseBody
public Map springMVCRequestParam2(@ModelAttribute RequestParamDemo requestParamDemo) {
logger.info(requestParamDemo.getParam1());
logger.info(requestParamDemo.getParam2());
Map result = new HashMap();
result.put("success", true);
return result;
}
需要为其新建一个类,适用于参数较多的情况
4.3、直接使用HttpServletRequest向后台传递参数
/**
* 直接使用HttpServletRequest向后台传递参数
*/
@RequestMapping("springMVCRequestParam3")
@ResponseBody
public Map springMVCRequestParam3(HttpServletRequest request, HttpServletResponse response) {
String param1 = request.getParameter("param1");
String param2 = request.getParameter("param2");
logger.info(param1);
logger.info(param2);
Map result = new HashMap();
result.put("success", true);
return result;
}
直接使用HttpServletRequest,一般情况不建议使用,增加不必要的代码,显得方法内部逻辑更加杂乱