Я использую ErrorDecoder для возврата правильного исключения, а не код состояния 500.
Есть ли способ получить исходное сообщение внутри декодера.Я вижу, что это внутри FeignException, но не в методе декодирования.Все, что у меня есть, это «код состояния» и пустая «причина».
public class CustomErrorDecoder implements ErrorDecoder {
private final ErrorDecoder errorDecoder = new Default();
@Override
public Exception decode(String s, Response response) {
switch (response.status()) {
case 404:
return new FileNotFoundException("File no found");
case 403:
return new ForbiddenAccessException("Forbidden access");
}
return errorDecoder.decode(s, response);
}
}
Здесь оригинальное сообщение: «message»: «Доступ к файлу запрещен»
feign.FeignException: status 403 reading ProxyMicroserviceFiles#getUserRoot(); content:
{"timestamp":"2018-11-28T17:34:05.235+0000","status":403,"error":"Forbidden","message":"Access to the file forbidden","path":"/root"}
Также я использую свой интерфейс FeignClient как RestController, поэтому я не использую никакой другой Controler, заполненный прокси, который может инкапсулировать вызовы методов.
@RestController
@FeignClient(name = "zuul-server")
@RibbonClient(name = "microservice-files")
public interface ProxyMicroserviceFiles {
@GetMapping(value = "microservice-files/root")
Object getUserRoot();
@GetMapping(value = "microservice-files/file/{id}")
Object getFileById(@PathVariable("id") int id);
}