SpringMVC @RequestMapping用法 参数绑定

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

@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进行方法限定 还可以限定多个请求方式访问

image.png

用法 例如:限定只有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/>

如果请求方式不对 报错405image.png

还可以限定多个请求方式 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>


绑定数组/集合


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

image.png

编写表单

<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类型 还可以对日期进行格式化

相关文章
|
前端开发 Java 数据库
49SpringMVC - 参数绑定(高级参数绑定)
49SpringMVC - 参数绑定(高级参数绑定)
59 0
|
前端开发 Java
48SpringMVC - 参数绑定(自定义)
48SpringMVC - 参数绑定(自定义)
50 0
47SpringMVC - 参数绑定(绑定包装pojo)
47SpringMVC - 参数绑定(绑定包装pojo)
35 0
|
应用服务中间件 数据库
46SpringMVC - 参数绑定(绑定pojo类型)
46SpringMVC - 参数绑定(绑定pojo类型)
75 0
45SpringMVC - 参数绑定(绑定简单类型)
45SpringMVC - 参数绑定(绑定简单类型)
59 0
|
6月前
|
JSON 前端开发 JavaScript
JAVAEE框架技术之5-springMVC参数绑定和异步交互
JAVAEE框架技术之5-springMVC参数绑定和异步交互
73 0
JAVAEE框架技术之5-springMVC参数绑定和异步交互
|
6月前
|
JSON 前端开发 Java
开发必备技能:探索Spring MVC请求映射和参数绑定的奇妙之旅!
开发必备技能:探索Spring MVC请求映射和参数绑定的奇妙之旅!
|
11月前
|
JSON Java 数据格式
SpringMVC-@RequestMapping的参数和用法
SpringMVC-@RequestMapping的参数和用法
148 0
|
Java 容器
SpringMVC中参数是如何绑定and返回结果是如何解析的?
SpringMVC中参数是如何绑定and返回结果是如何解析的?
79 0
43SpringMVC - 参数绑定(默认支持的参数类型)
43SpringMVC - 参数绑定(默认支持的参数类型)
52 0