feign.FeignException: status 500 reading

问题现象

微服务A调用用户微服务的修改操作,前端提示“undefined”,服务A报错日志如下:

feign.FeignException: status 500 reading IUserClient#modifyUser(String,List); content:
{"timestamp":"2020-04-10T06:19:54.158+0000","status":500,"error":"Internal Server Error","exception":"java.lang.NullPointerException","message":"No message available","path":"/user/modify"}
        at feign.FeignException.errorStatus(FeignException.java:62)
        at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91)
        at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138)
        at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
        at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
        at com.sun.proxy.$Proxy151.modifyUser(Unknown Source)

        .......

 

解决方案

List列表中存储的是User对象,User对象缺少字段导致无法修改(我的是User的用户组对象没有)。

产生原因

参数缺失导致的空指针异常。

 

### 解决 Feign 客户端抛出的状态码 400 错误 当 Feign 客户端接收到 HTTP 400 Bad Request 状态码时会触发 `feign.FeignException`。这表明请求存在语法错误或无法被服务器理解并处理。 为了妥善应对这种情况,可以采取以下措施: #### 自定义解码器 通过实现自定义的 `ErrorDecoder` 接口来捕获特定类型的异常,并转换成更有意义的应用层异常。这样可以在不改变原有逻辑的情况下更好地管理 API 调用失败的情况[^2]。 ```java public class CustomErrorDecoder implements ErrorDecoder { @Override public Exception decode(String methodKey, Response response) { if (response.status() == 400) { // 可以在这里解析响应体中的具体错误信息 try { String body = Util.toString(response.body().asReader()); return new BadRequestException(body); } catch (IOException e) { throw new RuntimeException(e); } } return errorStatus(methodKey, response); } } ``` #### 配置全局异常处理器 如果希望在整个应用程序范围内统一处理此类问题,则可以通过 Spring 的全局异常处理器机制来进行配置。这种方式允许开发者集中管理和记录所有未被捕获的异常事件[^3]。 ```java @ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(FeignException.BadRequest.class) public ResponseEntity<String> handleBadRequest(BadRequestException ex){ logger.error("Bad request received from service", ex.getMessage()); // 返回友好的提示给前端或其他调用方 return new ResponseEntity<>("Invalid input data.", HttpStatus.BAD_REQUEST); } } ``` 以上两种方式都可以有效地帮助开发人员识别和修复由客户端引起的请求格式不当所造成的 400 错误。同时建议检查实际发送的数据结构是否符合目标微服务的要求,确保参数名称拼写无误以及数据类型匹配等问题得到解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值