@RequestMapping
用法
窄化请求路径
@RequestMapping放在类上 设置请求前缀
@RequestMapping放在方法上 设置方法对应的请求路径
完整请求:前缀 + 请求路径
@Controller @RequestMapping("/demo01") public class Demo01IndexController { @RequestMapping("/index") public String index() { return "/index.jsp"; } }
访问路径
<a href="${pageContext.request.contextPath}/demo01/index.action">基础-窄化</a>
多路径映射
@RequestMapping value是一个数组 那么就可以设置多个访问路径
@Controller @RequestMapping("/demo01") public class Demo01IndexController { @RequestMapping({"/index","/index2"}) public String index() { return "/index.jsp"; } }
访问路径
<a href="${pageContext.request.contextPath}/demo01/index2.action">基础-多路径</a>
请求方法限定
@RequestMapping支持各种请求方式访问 但是还可以通过method进行方法限定 还可以限定多个请求方式访问
用法 例如:限定只有POST请求方式才能访问
@Controller @RequestMapping("/demo01") public class Demo01IndexController { @RequestMapping(value = "/post", method = RequestMethod.POST) public String post() { return "/index.jsp"; } }
访问路径
<a href="${pageContext.request.contextPath}/demo01/post.action">基础-get请求访问</a><br/> <form action="${pageContext.request.contextPath}/demo01/post.action" method="post"> <input type="submit" value="基础-post请求访问"/> </form><br/>
如果请求方式不对 报错405
还可以限定多个请求方式 method参数是一个数据
@Controller @RequestMapping("/demo07") public class Demo07Controller { @RequestMapping(value = "/add",method = {RequestMethod.POST,RequestMethod.GET}) public String test01(User user){ System.out.println(user); return "/index.jsp"; } }
参数绑定
简介
在 SpringMVC 中,提交请求的数据是通过方法形参来接收的。从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参。
简单数据类型
在控制器方法中 只要有对应的参数 SpringMVC就可以完成自动封装
用法 接受参数id并打印
@Controller @RequestMapping("/demo02") public class Demo02ParamController { @RequestMapping({"/findById"}) public String findById(String id) { System.out.println("id: " + id); return "/index.jsp"; } }
访问
<a href="${pageContext.request.contextPath}/demo02/findById.action?id=10">参数-简单数据</a> <br/>
绑定POJO类型
当提交一组数据时,通常我们会提供一个JavaBean用于数据的封装。
JavaBean
public class User { private Integer id; private String username; private String password; private List<String> hobbies; private Date birthday; // setter/getter/toString }
编写控制器
@Controller @RequestMapping("/demo02") public class Demo02ParamController { @RequestMapping("/add") public String add(User user) { System.out.println(user); return "/index.jsp"; } }
并访问
<a href="${pageContext.request.contextPath}/demo02/add.action?id=10&username=jack&password=1234">参数-POJO-路径</a> <br/>
复杂POJO
除了有简单的POJO类型 还有复杂的POJO类型
JavaBean
public class Order { private Double price; private User user; // setter/getter/toString }
编写控制器
@Controller @RequestMapping("/demo02") public class Demo02ParamController { @RequestMapping("/addOrder") public String addOrder(Order order) { System.out.println(order); return "/index.jsp"; } }
编写表单 并发送请求
<form action="${pageContext.request.contextPath}/demo02/addOrder.action" method="post"> <input type="text" name="price" placeholder="价格" /> <br/> <input type="text" name="user.id" placeholder="用户id" /> <br/> <input type="text" name="user.username" placeholder="用户名" /> <br/> <input type="submit" value="提交"/> <br/> </form>
绑定数组/集合
如果提交一组数据 那么可以使用数组或者集合来进行封装
编写表单
<form action="${pageContext.request.contextPath}/demo02/add.action" method="post"> <input type="text" name="id" placeholder="id"/> <br/> <input type="text" name="username" placeholder="用户名"/> <br/> <input type="text" name="password" placeholder="密码"/> <br/> <input type="checkbox" name="hobbies" value="抽烟" />抽烟 <input type="checkbox" name="hobbies" value="喝酒" />喝酒 <input type="checkbox" name="hobbies" value="烫头" />烫头 <br/> <input type="submit" value="参数-POJO-表单"/> </form>
自定义参数绑定:日期
SpringMVC默认支持的格式是:yyyy-MM-dd 有两种方式来配置日期
方式一:全局配置 实现WebMvcConfigurer接口 重写addFormatter方法
1.@Configuration @ComponentScan(basePackages="com.czxy.mvc.controller") @EnableWebMvc public class MvcConfiguration implements WebMvcConfigurer { /** * 设置日期转换 * @param registry */ @Override public void addFormatters(FormatterRegistry registry) { DateFormatter dateFormatter = new DateFormatter(); registry.addFormatterForFieldType(Date.class, dateFormatter ); } }
方式二:单独设置 使用@DateTimeFormat注解格式化
import org.springframework.format.annotation.DateTimeFormat; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday;
总结
@RequestMapping不仅可以用来映射请求 还可以多路径映射 限定请求方式
参数绑定可以绑定简单数据类型 POJO类型 还可以对日期进行格式化