Spring cloud之FeignClient post参数接收400问题

HTTP状态码:400

状态码400的主要定义:
客户端错误,请求包含语法错误或无法完成请求
解释:
告诉客户端它发送了一条异常请求。400页面是当用户在打开网页时,返回给用户界面带有400提示符的页面。其含义是你访问的页面域名不存在或者请求错误。
主要分为两种:
1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
2、请求参数有误。
400的主要有两种形式:
1、bad request意思是“错误的请求";
2、invalid hostname意思是"不存在的域名”。

Feign 返回400 的主要原因有以下四点(请先定位自己是什么错误再参考):

1、Content-Length 多服务调用导致请求头长度不一致

**解决办法:
		使用GET方式请求,将参数挂在URL下面提交就会解决问题**

2、未指定请求格式 导致服务端无法识别

**解决办法:
给@RequestMapping()指定请求格式
@RequestMapping(value = "/txt/add", produces ="application/json")**
@ResponseBody
@RequestMapping(value = "/txt/add", method = RequestMethod.POST, produces ="application/json")
    public ReturnData add(@RequestBody JSONObjectEx jsont);
    /*如果是@RequestBody 的话不必指定请求方式,Spring会强制指定POST,就算你指定了GET也会报错,@RequestParam强制GET,指定POST还是会按GET请求,这个就有点强势了*/

3、请求 body 太大

比如:A服务里面调用B、C服务,从B、C里面查询出来的数据组织到一起然后去请求D服务,D服务端返回400
** 解决方式**
将pom.xml里的feign-client依赖换成feign-httpclient,然后就可以调用第三方服务

		<dependency>
		<groupId>io.github.openfeign</groupId>
		<artifactId>feign-httpclient</artifactId>
		<version>10.7.4</version>
		</dependency>

bootstrap.yml里面,feign配置

feign:
  httpclient:
    enabled: true
  hystrix:
    #设置feign开启hystrix(服务保护)
    enabled: true
  compression:
    request:
      # 开启数据压缩请求
      enabled: true
      # 压缩数据类型
      mime-types: text/xml, application/xml, application/json
      # 数据压缩下限 2048表示传输数据大于2048 才会进行数据压缩(最小压缩值标准)
      min-request-size: 2048
    # 开启数据压缩响应
    response:
      enabled: true
  server:
    compression:
      enabled: true
      mime-types: text/xml, application/xml, application/json
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值