feign.FeignException: status 400 reading xxxFeignService#selectByKeyWord(String) 和 status 404...错误

博客主要分析了Spring Cloud中Feign出现400和404错误的原因。400错误可能是传递参数为空值或长度过长;404错误可能是访问路径错误,如参数未用注解指定、方法未指定请求方式,且只能用@RequstMapping注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

status 400 reading LawFeignService#selectByKeyWord(String):

1.错误原因(可能导致报错的原因)

  • 传递的参数可能为空值
解决办法:@RequestParam(value = "xxx",required = false) String xxx
  • 参数长度过长造成的
解决办法1:将参数封装成对象,使用 @RequestBody注解 在feign消费服务上
解决办法2:修改内嵌tomcat的参数,内嵌tomcat对参数的默认限制是8K

server.max-http-header-size=20480

status 404 reading xxService#xxmethod(String):

1.错误原因(可能是访问路径错误)

  • 参数没有使用注解指定
解决办法:@RequestParam(value = "xxx",required = false) String xxx
  • 方法没有指定请求方式
解决办法: @RequestMapping(value="/...,method=RequestMethos.GET) 

ps:只能使用@RequstMapping注解,不能使用GetMapping注解(

### 解决 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 错误。同时建议检查实际发送的数据结构是否符合目标微服务的要求,确保参数名称拼写无误以及数据类型匹配等问题得到解决。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值