如何让Spring Rest 接口中路径参数可选

作者:孙亖 时间:2022-02-17 19:29:14 

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没找到的错误

如何让Spring Rest 接口中路径参数可选

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

如何让Spring Rest 接口中路径参数可选

那么按照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传递参数

如何让Spring Rest 接口中路径参数可选

这就是restful风格传参

也可以通过变相的组合注解实现:

  • @PostMapping

  • @GetMapping

  • @PutMapping

  • @DeleteMapping

  • @PatchMapping

来源:https://sunsi.blog.csdn.net/article/details/102519682

标签:Spring,Rest,接口,参数
0
投稿

猜你喜欢

  • Java源码解析之详解ImmutableMap

    2023-11-23 08:06:07
  • 使用mybatis插件PageHelper实现分页效果

    2023-03-29 15:12:03
  • 代码实例分析android中inline hook

    2022-11-06 18:45:08
  • C# winform程序读取文本中的值实例讲解

    2023-03-17 21:36:51
  • Flutter验证码输入框的2种方法实现

    2023-07-17 16:22:07
  • Spring如何使用注解的方式创建bean

    2022-01-29 03:45:49
  • 浅析Spring 中 Bean 的理解与使用

    2023-07-09 03:12:03
  • Java的Socket网络编程基础知识入门教程

    2021-11-19 10:10:37
  • C#序列化成XML注意细节

    2023-04-20 01:07:00
  • Java设计通用的返回数据格式过程讲解

    2023-11-09 00:16:40
  • Java 接口和抽象类的区别详解

    2021-07-26 13:30:21
  • 秒懂Kotlin之Java工程师快速掌握Kotlin的技巧

    2023-07-09 21:25:19
  • SpringBoot整合XxlJob分布式任务调度平台

    2022-07-09 09:47:37
  • Java处理InterruptedException异常的理论与实践

    2023-07-25 03:22:33
  • 一文带你彻底理解Java序列化和反序列化

    2021-12-23 05:24:12
  • c#字符串编码编码(encoding)使用方法示例

    2022-10-04 07:24:58
  • Java 8中字符串拼接新姿势StringJoiner详解

    2022-03-09 03:00:28
  • 通过实例深入了解java序列化

    2022-12-01 17:37:39
  • 一文带你快速了解java中的static关键词

    2022-06-03 16:03:58
  • Java date format时间格式化操作示例

    2021-10-28 19:12:24
  • asp之家 软件编程 m.aspxhome.com