SpringBoot RequestMapping各方法的使用

在使用SpringBoot开发web应用时实际采用的是spring mvc来实现,现在采用REST风格的开发方式越来越多spring当然也支持这一开发模式。

代码环境spring boot 页面配置为使用jsp的方式

rest模式我就不介绍了,主要是GET、POST、PUT、DELETE方法,spring mvc也提供了对应的实现方式 
@RequestMapping(method = RequestMethod.GET) 
@RequestMapping(method = RequestMethod.POST) 
@RequestMapping(method = RequestMethod.PUT) 
@RequestMapping(method = RequestMethod.DELETE) 
当然也可以使用 
@GetMapping 
@PostMapping 
@PutMapping 
@DeleteMapping 
这与上面的是一样的效果 
下面我们来一个一个的实现

GetMapping

    @GetMapping("/httpMethod")
    public String httpMethd(){
        return "test/test";
    }

使用这个代码我们定义了一个get方法,通过这个方法spring boot会自动跳转到test目录下的test.jsp页面当然你还可以在@GetMapping下面再加上@ResponseBody,这样返回的就是一个字符串而不是跳转页面了。

PostMapping

test.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: jacky
  Date: 17-10-3
  Time: 下午4:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>HttpMethodTest</title>
</head>
<body>
<form action="/httpMethod" method="post">
    名称
    <input type="text" name="name">
    <br>
    密码
    <input type="text" name="pwd">
    <br>
    <input type="submit" name="提交">
</form>
</body>
</html>

controller类

    @PostMapping("/httpMethod")
    @ResponseBody
    public String httpMethod(@RequestParam String name,@RequestParam String pwd){
        System.out.println("sent name is "+name);
        System.out.println("sent pwd is "+pwd);
        return "success";
    }

这里表单定义了提交方法为post,这时提交表单在后台页面就能打印处理提交的信息,同时会向前台返回success字符串。

PutMapping DeleteMapping

本质上浏览器端的form表单只支持GET和POST方法并不支持PUT和DELETE方法,但是spring已经解决了这个问题,从spring3.0开始定义了一个filter来支持对PUT和DELETE方法的解析,下面我们就来看看怎么处理。 
首先我们要对jsp页面的表单做一个简单的修改

<%--
  Created by IntelliJ IDEA.
  User: jacky
  Date: 17-10-3
  Time: 下午4:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>HttpMethodTest</title>
</head>
<body>
<form action="/upload/httpMethod" method="post">
    <input type="hidden" name="_method" value="PUT/DELETE">
    名称
    <input type="text" name="name">
    <br>
    密码
    <input type="text" name="pwd">
    <br>
    <input type="submit" name="提交">
</form>
</body>
</html>

对比一下就看到了吧,我们添加了一个隐藏的输入框名字叫_method,值为PUT或者是DELETE 
controller代码

    @PutMapping("/httpMethod")
    @ResponseBody
    public String httpMethodPut(@RequestParam String name,@RequestParam String pwd){
        System.out.println("put sent name is "+name);
        System.out.println("put sent pwd is "+pwd);
        return "success";
    }

    @DeleteMapping("/httpMethod")
    @ResponseBody
    public String httpMethodDel(@RequestParam String name,@RequestParam String pwd){
        System.out.println("delete sent name is "+name);
        System.out.println("delete sent pwd is "+pwd);
        return "success";
    }

下面是重点了,引入filter,直接看代码

@Configuration
@ImportResource({"classpath:applicationContext.xml"})
public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MaterialApplication.class);
    }

    @Bean
    public FilterRegistrationBean httpMethodFilterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(httpMethodFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("HttpMethodFilter");
        registrationBean.setOrder(1);
        return registrationBean;
    }

    @Bean
    public Filter httpMethodFilter(){
        return new HiddenHttpMethodFilter();
    }

核心的filter就是HiddenHttpMethodFilter,这是spring自己定义来处理put和delete请求的filter,只需要配置这个filter过滤所有请求就行了,当然你还可以考虑过滤指定的路径请求。 
配置好后就可以测试一下结果。

猜你喜欢

转载自blog.csdn.net/dodott/article/details/81868841