我使用 ErrorDecoder 来返回正确的异常而不是 500 状态码。
是否有一种方法可以在解码器中检索原始消息。我可以看到它在 FeignException 中,但不在 decode 方法中。我只有 '状态代码' 和一个空的 'reason'。
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一样,所以我不使用任何其他的控制器来填充代理,这些代理可以封装方法调用。
@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);
}