SpringMVC总结三:请求Controller返回视图类型以及请求方式、参数介绍
视图解析,请求Controller返回的视图类型:
@Controller @RequestMapping("/test") public class TestController { //正常返回ModelAndView @RequestMapping("/modelAndView") public ModelAndView retModelAndView(){ ModelAndView mv = new ModelAndView("hello"); mv.addObject("msg","正常ModelAndView的返回"); return mv; } //返回json视图(json格式的数据) @RequestMapping("/jsonView") @ResponseBody //通过这个注解声明 返回json格式数据 public List<Book> returnJsonView() { List<Book> list = new ArrayList<>(); Book book1 = new Book(); book1.setId(1); book1.setName("降龙十八掌"); book1.setDesc("最难是亢龙有悔"); list.add(book1); Book book2 = new Book(); book2.setId(2); book2.setName("凌波微步"); book2.setDesc("走为上"); list.add(book2); return list; } //不做任何操作直接返回视图名称(jsp页面) 前提是要有这个jsp页面 @RequestMapping("/viewName") public String returnViewName() { String viewName = "index"; return viewName; } //重定向 @RequestMapping("/redirect") public String returnRedirect(){ //返回值以 redirect: 开头后面跟上url return "redirect:/test/jsonView.do"; } //请求转发 @RequestMapping("/forward") public String returnForward(){ //返回值以 forward: 开头后面跟上url return "forward:/test/jsonView.do"; } //不返回视图,只返回状态码 @RequestMapping("/noView") @ResponseStatus(HttpStatus.OK) public void returnNoView(){ } }
返回json视图需要的jar包:jackson-databind
请求方式限定:
// 请求方式限定 限定post请求方式 @RequestMapping(value = "/requestMethodPost", method = RequestMethod.POST) public ModelAndView requestMethodPost() { ModelAndView mv = new ModelAndView(); mv.setViewName("index");//设置视图名字(jsp页面) mv.addObject("msg", "requestMethod method=post"); return mv; } //请求方式限定 限定多种请求方式 @RequestMapping(value = "/requestMethod", method = {RequestMethod.POST, RequestMethod.GET}) public ModelAndView requestMethod() { ModelAndView mv = new ModelAndView(); mv.setViewName("index");//设置视图名字 mv.addObject("msg", "requestMethod method=post and get"); return mv; }
请求参数获取:
1,获取servlet内置对象(不推荐使用)
//获取servlet内置对象 不推荐使用 @RequestMapping("/servletObj") public ModelAndView getServletObj(HttpServletRequest request, HttpServletResponse response, HttpSession session) { ModelAndView mv = new ModelAndView("servlet_test");// WEB-INF/views/servlet_test.jsp页面 mv.addObject("request", "我是request===" + request); mv.addObject("response", "我是response===" + response); mv.addObject("session", "我是session===" + session); return mv; }
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> <h1>${request}</h1> <h1>${response}</h1> <h1>${session}</h1> </body> </html>
2,获取PathVariable(占位符)参数
//获取PathVariable(占位符)参数 @RequestMapping("/pathVariable/{name}/{code}") public ModelAndView getPathVariable(@PathVariable("name") String name, @PathVariable("code") String code) { ModelAndView mv = new ModelAndView("index"); mv.addObject("msg", "占位符映射参数,name=" + name + ",code=" + code); return mv; }
3,获取基本类型数据的请求参数
表单信息:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/test/baseDataTypeParams.do" method="post"> <table> <tr> <td>姓名:</td> <td><input name="name" value="zhangsan"/></td> </tr> <tr> <td>年龄:</td> <td><input name="age" value="20"/></td> </tr> <tr> <td>收入:</td> <td><input name="income" value="99999"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="提交表单"/></td> </tr> </table> </form> </body> </html>
controller:
//获取基本数据类型的请求参数 @RequestMapping("baseDataTypeParams") public ModelAndView getBaseDataTypeParams(@RequestParam("name") String name, @RequestParam("age") int age, @RequestParam("income") double income) { ModelAndView mv = new ModelAndView("index"); mv.addObject("msg", "name=" + name + ",age=" + age + ",income=" + income); return mv; }
4,获取请求参数并封装成pojo对象
写一个user类:
package zy.com.domain; public class User { private String name; private int age; private double income; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getIncome() { return income; } public void setIncome(double income) { this.income = income; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", income=" + income + '}'; } }
//获取请求参数并封装成pojo对象 @RequestMapping("/pojo") public ModelAndView getPojo(User user) { ModelAndView mv = new ModelAndView("index"); mv.addObject("msg", "接收的对象参数 user:" + user); return mv; }
把上面的表单请求的action改成
<form action="/test/pojo.do" method="post">
5,限制并获取参数信息
//获取并限制表单参数信息 requird必传参数 defaultvalue默认值... @RequestMapping("/param") public ModelAndView getParam(@RequestParam(value = "name", required = true, defaultValue = "zhangsan") String name) { ModelAndView mv = new ModelAndView("index"); mv.addObject("msg", "接收的参数 name:" + name); return mv; }
6,获取cookie参数信息
//获取cookie信息 @RequestMapping("/cookieInfo") public ModelAndView getCookieInfo(@CookieValue("JSESSIONID")String jsessionid){ ModelAndView mv = new ModelAndView("index"); mv.addObject("msg", "接收的参数 JSESSIONID:" + jsessionid); return mv; }
7,获取对象集合参数
对象集合类:
package zy.com.domain; import java.util.List; public class Books { private List<Book> userList; public List<Book> getUserList() { return userList; } public void setUserList(List<Book> userList) { this.userList = userList; } @Override public String toString() { return "Books{" + "userList=" + userList + '}'; } }
//获取对象集合信息 public ModelAndView getBookList(Books books){ ModelAndView mv = new ModelAndView("index"); mv.addObject("msg", "接收的参数 books:" + books); return mv; }
8,接收json格式请求(@RequestBody())
// 接收json格式对象 转成 javabean对象 @RequestMapping("/json") public ModelAndView getJson(@RequestBody() Book book) { ModelAndView modelAndView = new ModelAndView("index"); modelAndView.addObject("msg", "获取json信息转成user对象: book=" + book); System.out.println("-----------------------------------------"); System.out.println("book=" + book); return modelAndView; } // 将json数组对象 转成 包含javabean对象的集合 @RequestMapping("/jsonList") public ModelAndView getJsonList(@RequestBody() List<Book> bookList) { ModelAndView modelAndView = new ModelAndView("index"); modelAndView.addObject("msg", "获取json信息转成List<user>对象: bookList=" + bookList); System.out.println("-----------------------------------------"); System.out.println("bookList=" + bookList); return modelAndView; }