【发布时间】:2020-01-31 08:39:28
【问题描述】:
我有一个 Java REST API,供 2 个不同的消费者使用。默认情况下 REST 原则我的 API 应该定义请求标头的名称。但是现在我没有常见的情况。消费者使用不同的安全层提供不同的标头,这意味着两种方式的参数相同。
示例方法: (不是真实代码)
对于第一个消费者:
@PostMapping("/number")
Integer getNumber(@RequestHeader("no") String number, @RequestBody User user) {
/*...*/
}
对于第二个消费者:
@PostMapping("/number")
Integer getNumber(@RequestHeader("number") String number, @RequestBody User user) {
/*...*/
}
我在一个控制器中最多有 10 个方法,它们应该具有相同的名称和逻辑,但标题不同。请求路径前缀可能不同。
问题:
如何简化 REST 控制器,不创建 2 个具有相同方法和相同逻辑的不同控制器?
我尝试了什么:
我尝试了几个示例来创建一个具有 2 个不同接口的控制器,这些接口具有相同的方法,但映射不同。
示例:
控制器类
@RestController
@RequestMapping(path ="/application")
@Api(tags = {"application"})
public class ApplicationController implements AppMapping1, AppMapping2 {
@Override
public Integer getNumber(String number, User user) {
/*...*/
}
}
第一个界面
interface AppMapping1 {
@PostMapping("/num")
Integer getNumber(@RequestHeader("num") String number, @RequestBody User user);
}
第二界面
interface AppMapping2 {
@PostMapping("/number")
Integer getNumber(@RequestHeader("number") String number, @RequestBody User user);
}
结果:
控制器只映射第一个接口。所以
http://.../application/num工作正常,但http://.../application/number- 得到404错误代码。这意味着 Java Spring-Boot 没有这样的功能。需要更多的想法。
使用Java 8开发的项目; spring-boot:2.1.1.RELEASE; gradle
【问题讨论】:
标签: java spring rest spring-boot gradle