首页 > 解决方案 > Spring Controller:处理自定义返回类型

问题描述

我希望我的 Spring 控制器返回一个Either<Redirect, X>然后我可以使用过滤器/AOP 解包以避免重复的“这是重定向,还是 2xx 响应”代码。

例如

@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 的请求进入时,它可能会进入错误的应用程序实例,并且需要重定向到正确的实例。

标签: spring-bootspring-mvc

解决方案


推荐阅读