spring-boot - Spring Controller:处理自定义返回类型
问题描述
我希望我的 Spring 控制器返回一个Either<Redirect, X>
然后我可以使用过滤器/AOP 解包以避免重复的“这是重定向,还是 2xx 响应”代码。
如果返回类型是 an
Either.Left(Redirect("host", "port"))
那么我的 Filter/AOP 将返回 302。如果返回类型是 an
Either.Right(Vehicle(...))
那么我的 Filter/AOP 将返回 200 并将有效负载序列化为 JSON。
例如
@GetMapping("vehicles/{id}")
public Either<Redirect, Vehicle> getById(@PathVariable("id") String id) {
return someService.get(id);
}
是否可以使用 Spring 执行此操作?或者我是否必须在我的控制器层中处理这个重定向,例如
@GetMapping("vehicles/{id}")
public ResponseEntity getById(@PathVariable("id") String id) {
return someService.get(id)
.fold(
redirect -> ResponseEntity.status(302).location(...).build(),
payload -> ResponseEntity.ok(payload).build()
);
}
如果有用,请提供一些额外的上下文:
此应用程序是集群的成员,并具有“本地状态”。整个状态分布在整个集群中。因此,当一个针对特定 id/key 的请求进入时,它可能会进入错误的应用程序实例,并且需要重定向到正确的实例。
解决方案
推荐阅读
- java - Springboot I/O错误连接被拒绝错误使用resttemplate
- reactjs - React,Jest tdd 与打字稿
- excel - 检查工作表是否存在,然后删除并添加具有相同名称的新工作表
- c - 使用来自 argv 的参数执行命令并打印命令输出和 pid 的 C 程序
- java - Hibernate:连接表和表 C 之间的一对多映射
- r - 有没有办法在永久删除后在 RStudio 上重新安装一个包?
- node-webkit - Node Webkit 从 Node 更改 DOM 元素
- perl - chomp 似乎清理了整个字符串或阻止它被打印
- javascript - 使用按位运算符删除小数部分如何工作?
- angular-test - 无法绑定到“ngModel”,因为它不是“quill-editor”的已知属性