SpringMVC @RequestMapping用法 参数绑定

举报
陶然同学 发表于 2022/06/23 23:35:32 2022/06/23
【摘要】 目录 @RequestMapping 简介 用法      窄化请求路径      多路径映射           请求方法限定 参数绑定         简...

目录

@RequestMapping

简介

用法

     窄化请求路径

     多路径映射     

     请求方法限定

参数绑定

        简介

        简单数据类型

        绑定POJO类型

        复杂POJO

        绑定数组/集合

        自定义参数绑定:日期

总结


@RequestMapping

简介

在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置

用法

     窄化请求路径

@RequestMapping放在类上 设置请求前缀

@RequestMapping放在方法上 设置方法对应的请求路径

完整请求:前缀 + 请求路径


  
  1. @Controller
  2. @RequestMapping("/demo01")
  3. public class Demo01IndexController {
  4. @RequestMapping("/index")
  5. public String index() {
  6. return "/index.jsp";
  7. }
  8. }

     访问路径

<a href="${pageContext.request.contextPath}/demo01/index.action">基础-窄化</a>
 

 多路径映射     

@RequestMapping value是一个数组 那么就可以设置多个访问路径


  
  1. @Controller
  2. @RequestMapping("/demo01")
  3. public class Demo01IndexController {
  4. @RequestMapping({"/index","/index2"})
  5. public String index() {
  6. return "/index.jsp";
  7. }
  8. }

访问路径

<a href="${pageContext.request.contextPath}/demo01/index2.action">基础-多路径</a>
 

     请求方法限定

@RequestMapping支持各种请求方式访问 但是还可以通过method进行方法限定 还可以限定多个请求方式访问

用法 例如:限定只有POST请求方式才能访问


  
  1. @Controller
  2. @RequestMapping("/demo01")
  3. public class Demo01IndexController {
  4. @RequestMapping(value = "/post", method = RequestMethod.POST)
  5. public String post() {
  6. return "/index.jsp";
  7. }
  8. }

访问路径


  
  1. <a href="${pageContext.request.contextPath}/demo01/post.action">基础-get请求访问</a><br/>
  2. <form action="${pageContext.request.contextPath}/demo01/post.action" method="post">
  3. <input type="submit" value="基础-post请求访问"/>
  4. </form><br/>

如果请求方式不对 报错405

 还可以限定多个请求方式 method参数是一个数据


  
  1. @Controller
  2. @RequestMapping("/demo07")
  3. public class Demo07Controller {
  4. @RequestMapping(value = "/add",method = {RequestMethod.POST,RequestMethod.GET})
  5. public String test01(User user){
  6. System.out.println(user);
  7. return "/index.jsp";
  8. }
  9. }

参数绑定

        简介

SpringMVC 中,提交请求的数据是通过方法形参来接收的。从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参。

        简单数据类型

在控制器方法中 只要有对应的参数 SpringMVC就可以完成自动封装

用法 接受参数id并打印


  
  1. @Controller
  2. @RequestMapping("/demo02")
  3. public class Demo02ParamController {
  4. @RequestMapping({"/findById"})
  5. public String findById(String id) {
  6. System.out.println("id: " + id);
  7. return "/index.jsp";
  8. }
  9. }

访问    

<a href="${pageContext.request.contextPath}/demo02/findById.action?id=10">参数-简单数据</a> <br/>
 

      绑定POJO类型

当提交一组数据时,通常我们会提供一个JavaBean用于数据的封装。

JavaBean


  
  1. public class User {
  2. private Integer id;
  3. private String username;
  4. private String password;
  5. private List<String> hobbies;
  6. private Date birthday;
  7. // setter/getter/toString
  8. }

编写控制器


  
  1. @Controller
  2. @RequestMapping("/demo02")
  3. public class Demo02ParamController {
  4. @RequestMapping("/add")
  5. public String add(User user) {
  6. System.out.println(user);
  7. return "/index.jsp";
  8. }
  9. }

并访问

<a href="${pageContext.request.contextPath}/demo02/add.action?id=10&username=jack&password=1234">参数-POJO-路径</a> <br/>
 

        复杂POJO

除了有简单的POJO类型 还有复杂的POJO类型

JavaBean


  
  1. public class Order {
  2. private Double price;
  3. private User user;
  4. // setter/getter/toString
  5. }

编写控制器


  
  1. @Controller
  2. @RequestMapping("/demo02")
  3. public class Demo02ParamController {
  4. @RequestMapping("/addOrder")
  5. public String addOrder(Order order) {
  6. System.out.println(order);
  7. return "/index.jsp";
  8. }
  9. }

编写表单 并发送请求


  
  1. <form action="${pageContext.request.contextPath}/demo02/addOrder.action" method="post">
  2. <input type="text" name="price" placeholder="价格" /> <br/>
  3. <input type="text" name="user.id" placeholder="用户id" /> <br/>
  4. <input type="text" name="user.username" placeholder="用户名" /> <br/>
  5. <input type="submit" value="提交"/> <br/>
  6. </form>

        绑定数组/集合

如果提交一组数据 那么可以使用数组或者集合来进行封装

编写表单


  
  1. <form action="${pageContext.request.contextPath}/demo02/add.action" method="post">
  2. <input type="text" name="id" placeholder="id"/> <br/>
  3. <input type="text" name="username" placeholder="用户名"/> <br/>
  4. <input type="text" name="password" placeholder="密码"/> <br/>
  5. <input type="checkbox" name="hobbies" value="抽烟" />抽烟
  6. <input type="checkbox" name="hobbies" value="喝酒" />喝酒
  7. <input type="checkbox" name="hobbies" value="烫头" />烫头 <br/>
  8. <input type="submit" value="参数-POJO-表单"/>
  9. </form>

        自定义参数绑定:日期

SpringMVC默认支持的格式是:yyyy-MM-dd 有两种方式来配置日期

方式一:全局配置 实现WebMvcConfigurer接口 重写addFormatter方法


  
  1. @Configuration
  2. @ComponentScan(basePackages="com.czxy.mvc.controller")
  3. @EnableWebMvc
  4. public class MvcConfiguration implements WebMvcConfigurer {
  5. /**
  6. * 设置日期转换
  7. * @param registry
  8. */
  9. @Override
  10. public void addFormatters(FormatterRegistry registry) {
  11. DateFormatter dateFormatter = new DateFormatter();
  12. registry.addFormatterForFieldType(Date.class, dateFormatter );
  13. }
  14. }

方式二:单独设置 使用@DateTimeFormat注解格式化


  
  1. import org.springframework.format.annotation.DateTimeFormat;
  2. @DateTimeFormat(pattern = "yyyy-MM-dd")
  3. private Date birthday;

总结

@RequestMapping不仅可以用来映射请求 还可以多路径映射 限定请求方式

参数绑定可以绑定简单数据类型 POJO类型 还可以对日期进行格式化

文章来源: blog.csdn.net,作者:陶然同学,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_45481821/article/details/121809836

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。