Я бы хотел, чтобы мои Spring Controllers возвращали Either<Redirect, X>
, который затем можно развернуть, используя Filter / AOP, чтобы избежать повторения "это код перенаправления или ответ 2xx".
Если тип возвращаемого значения Either.Left(Redirect("host", "port"))
, то мой Фильтр / AOP вернет 302.
Если тип возвращаемого значения Either.Right(Vehicle(...))
, то мой Фильтр / 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()
);
}
Немного дополнительного контекста, если это полезно:
Это приложение является членом кластера и имеет "местное государство". Общее состояние распределено по кластеру. В результате, когда приходит запрос на конкретный идентификатор / ключ, он может попасть в неправильный экземпляр приложения, и его нужно будет перенаправить на правильный экземпляр.