计算机系统应用教程网站

网站首页 > 技术文章 正文

SpringBoot RequestMapping各方法的使用

btikc 2024-10-21 04:14:12 技术文章 22 ℃ 0 评论

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过滤所有请求就行了,当然你还可以考虑过滤指定的路径请求。

配置好后就可以测试一下结果。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表