如何让Spring Rest 接口中路径参数可选
Spring Rest接口路径参数可选
我有一个 Spring Rest 服务,其中有一个路径参数是可选的(实际情况是我原来将参数放到路径中,而另外一个前端通过 body 传给我)。按照传统的方式是把这个服务在代码里面分成两个方法,一个带路径参数,一个不带,但是这样看起来不优雅,让人疑惑。
我试着给 @PathVariable 注解加上 require=false 注解,但是不起作用,返回404错误。
下面的形式就是传统方式:
@RequestMapping(value = "/path/{id}")
public String getResource(@PathVariable String id) {
return service.processResource(id);
}
@RequestMapping(value = "/path")
public String getResource() {
return service.processResource();
}
但是我真的不喜欢这种方式,臃肿。
从 Spring 4 and Java 8 开始(其实和 Java 8 关系不大),在一个方法里面实现可选路径参数变得很简单,如下所示,就是同时定义两个路由:
@RequestMapping(value = {"/path", "/path/{id}")
public String getResource(@PathVariable Optional<String> id) {
if (id.isPresent()) {
return service.processResource(id.get());
} else {
return service.processResource();
}
}
确实,在一个方法里面统一业务要优雅得多。
RestFul风格传参
RestFul风格就是所有参数都由/传递,而不是传统的?xx&xx形式
例如:写一个Controller:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestfulController {
@RequestMapping("/add")
public String test(int a,int b, Model model){
int res = a+b;
model.addAttribute("msg","结果为"+res);
return "test";
}
}
可以看到出现a,b没找到的错误

按照传统方式传递参数:?a=1&b=2

那么按照Restful风格传递参数就应该:在方法参数值前加@PathVariable注解,并在url上直接绑定参数,可以同时设置Request的方法类型(GET、POST、DELETE、OPTIONS、HEAD、PATCH、PUT、TRACE)
@PathVariable:让方法参数的值对应绑定到一个url模板变量上
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestfulController {
@RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.GET)
public String test(@PathVariable int a,@PathVariable int b, Model model){
int res = a+b;
model.addAttribute("msg","结果为"+res);
return "test";
}
}
再次开启Tomcat,并设定a=1,b=3:
/add/1/3传递参数

这就是restful风格传参
也可以通过变相的组合注解实现:
@PostMapping@GetMapping@PutMapping@DeleteMapping@PatchMapping
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
详解Spring Boot Oauth2缓存UserDetails到Ehcache
这篇文章主要介绍了详解Spring Boot Oauth2缓存UserDetails到Ehcache,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08
Maven方式构建SpringBoot项目的实现步骤(图文)
Maven是一个强大的项目管理工具,可以帮助您轻松地构建和管理Spring Boot应用程序,本文主要介绍了Maven方式构建SpringBoot项目的实现步骤,具有一定的参考价值,感兴趣的可以了解一下2023-09-09
详谈Map的key、value值的数据类型不能为基本类型的原因
这篇文章主要介绍了详谈Map的key、value值的数据类型不能为基本类型的原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09
使用mybatisPlus的queryWrapper做左联接,内联接方式
本文介绍了如何使用Mybatis-Plus的QueryWrapper进行SQL查询,包括左连接、内连接等操作,通过示例代码展示了如何构建复杂的SQL查询,并将结果存储在List对象中返回,希望给读者提供参考2025-03-03


最新评论