Spring Boot同一REST端点支持有无参数GET请求的实现咨询
回答:同一GET端点实现两种时间返回逻辑
当然可行!这种通过可选请求参数实现同一端点不同行为的设计,在RESTful API开发里非常常见,Spring Boot对此支持得非常友好,实现起来也很简洁。
下面直接上可运行的代码示例,我会把关键细节给你讲清楚:
1. 控制器核心代码
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.time.Instant; @RestController public class TimeController { @GetMapping("/time") public Long getTime(@RequestParam(value = "delta", required = false, defaultValue = "0") Long delta) { // 获取当前Unix时间戳(秒数,和Linux时间戳一致) long currentTimestamp = Instant.now().getEpochSecond(); // 直接返回调整后的时间戳,默认delta为0时就是当前时间 return currentTimestamp + delta; } }
2. 关键细节解释
- @RequestParam的配置:
required = false:标记delta是可选参数,不传这个参数也能正常访问接口defaultValue = "0":如果没传delta,自动用0作为默认值,这样就和“返回当前时间”的逻辑无缝衔接了
- 时间戳处理:
Instant.now().getEpochSecond()获取的是标准Unix时间戳(秒级),完全符合你要的Linux时间戳格式 - 逻辑简化:不管有没有传参数,统一执行
当前时间戳 + delta的逻辑,默认情况delta为0,就是返回当前时间,不用写额外的分支判断,代码更清爽
3. 测试验证
- 访问
GET /time:返回当前秒级时间戳,比如1718924567 - 访问
GET /time?delta=100000:返回当前时间加100000秒后的时间戳,比如1719024567 - 访问
GET /time?delta=-50000:返回当前时间减50000秒后的时间戳,比如1718874567
这种设计既保持了接口的简洁性,又完美覆盖了你的两种使用场景,完全符合RESTful的设计原则。
内容的提问来源于stack exchange,提问作者Darren Graham
相关产品推荐
相关产品推荐

