我正在尝试创建一个安静的API(使用Spring Boot v2.0.0.Release),我希望有一个端点,但我希望有两种可能的用途:
GET /time - outputs current time (e.g. linux epoch in seconds)
GET /time?delta=100000 (time adjusted by the delta in seconds e.g. +ve=future -ve=past)
首先这可能吗?其次,是否有人有代码示例?
非常感谢您的帮助
答案 0 :(得分:1)
感谢您的建议,我发现这对我有用。它需要添加defaultValue。
@RequestMapping(value = "/time",
produces = { "text/plain" },
method = RequestMethod.GET)
public ResponseEntity<String> getTime(@RequestParam(value = "delta",
required = false,
defaultValue = "0")
long delta) {
if (0L == delta) {
return new ResponseEntity<String>(calcTime(), HttpStatus.OK);
}
else {
return new ResponseEntity<String>(calcTime(delta), HttpStatus.OK);
}
}
答案 1 :(得分:0)
不,不可能。为什么不用可选参数创建一个端点?
检查类似问题的其他答案:
Spring MVC using same path on endpoints to return different content?
答案 2 :(得分:0)
您可以使用Java 8和Spring执行类似于返回类型String
的操作@GetMapping("/time")
public String getTime(@RequestParam Optional<Integer> delta) {
//...
}
或
@RequestMapping("/time")
public String getTime(@RequestParam Optional<Integer> delta) {
//...
}
答案 3 :(得分:0)
除了Java 8的可选@RequestParam
之外,您还可以执行以下操作:在required=false
@RequestParam
参数
@RestController
class MyClass {
@RequestMapping("/time")
public MyType myEndpoint(@RequestParam(required=false) Integer delta) {
// if delta is null then it hasn't been provided
}
答案 4 :(得分:0)
是的,这确实是可能的。您似乎想要一个端点,但需要一个可选的delta
参数。
要实现这一点,你只需要在你的方法上使用一个@RequestMapping注释,所有的Spring仪式都会在参数上进行,例如:
@RequestMapping(value = “/time”)
public TimeResponse time(@RequestParam(required = false) Integer delta) {
if (delta == null) {
// default case
}
// case where delta is present
}