feign参数过多导致调用失败的解决方案

目录
  • feign参数过多调用失败
    • 错误信息
    • 报这个错误的原因是因为
    • 给出了两种解决办法
  • feign多参数传递踩坑记录
    • 场景
    • 现在的问题是
    • 解决方案

feign参数过多调用失败

错误信息

JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens…

通过feign去调用其他服务的时候报上面的错误了,当传入的参数比较少的时候并没有错误,但是传入参数一多就自动走hystrix熔断器了。

通过层层排查

报这个错误的原因是因为

JSON 解析错误:非法字符((CTRL-CHAR,代码 31)):令牌之间只允许使用常规空格(\r、\n、\t)...

json解析错误了,开始想的是用一个实体类去接收对面返回的参数,所以报这个错误,好吧,那我用一个object去接收吧,

但是结果显示还是照样会走熔断器,接着就用map去接收返回参数,还是一样,后来去百度查了说是要配置feign,取消压缩,

试了,没用。最后去百度一下说是因为传输的数据被压缩了,只要加入feign的配置去除压缩限制就行了。可是还是没用,无奈之下只能请教自己的同事。

给出了两种解决办法

第一种:将被调用方的返回数据缩小(我就是用的这种方法,但是这个方法不是长久之计)

第二种:使用原生的http去请求对面的api,网上有很多的工具包。

feign多参数传递踩坑记录

真的是头大的一天,看了网上好多feign传参的博客,半天找不到怎么处理又传递基本类型又传递实体类的,赶紧在这写下来,可恶

场景

假如现在有一个分页的请求,前端给了我们消费端的参数有:

  • int类型的pageNum,表示分页页码
  • int类型的pageSize,表示每页数据的条数
  • 实体类的相关参数

然后我们用的是thymeleaf,所以需要一个model给前端返回分页相关参数

现在的问题是

我要把pageNum、pageSize和实体类传递给服务端,让他给我分页结果的相关参数

解决方案

1. 消费端controller:

这里的参数该怎么接收怎么接收

2. 消费端feign接口对应方法:

  • 给两个int类型的数据加上@RequestParam
  • 给实体类加上@RequestBody

3. 服务端controller:

和feign接口方法一样

  • 给两个int类型的数据加上@RequestParam
  • 给实体类加上@RequestBody

终于是不会报错了xdm

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • feign实现传递参数的三种方式小结

    需要注意的一点是,feign好像是无法传递list集合类型的,但是你可以通过传递对象类型,然后在接收方再次将对象装在集合中达到集合传递的效果 传递方式一:传递的都是基本数据类型 restful风格参数,用@PathVariable写着走就行了 传递方式二:传递数组类型的参数 不使用restful风格,直接用@RequestParam声明参数之间的对应关系. 传递方式三:传递带有对象的参数 1.使用restful风格的参数要用@Pathvarible声明参数对应关系,@Pathvariable用于

  • 解决SpringCloud Feign传对象参数调用失败的问题

    SpringCloud Feign传对象参数调用失败 不支持GET请求方式 使用Apache HttpClient替换Feign原生httpclient @RequestBody接收json参数 bootstrap-local.yml feign: httpclient: enabled: true pom.xml <!-- 使用Apache HttpClient替换Feign原生httpclient --> <dependency> <groupId>com.netf

  • SpringCloud Feign参数问题及解决方法

    这篇文章主要介绍了SpringCloud Feign参数问题及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天遇到使用Feign调用微服务,传递参数时遇到几个问题 1.无参数 以GET方式请求 服务提供者 @RequestMapping("/hello") public String Hello(){ return "hello,provider"; } 服务消费者 @GetMapping("

  • feign参数过多导致调用失败的解决方案

    目录 feign参数过多调用失败 错误信息 报这个错误的原因是因为 给出了两种解决办法 feign多参数传递踩坑记录 场景 现在的问题是 解决方案 feign参数过多调用失败 错误信息 JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens… 通过feign去调用其他服务的时候报上面的错误了,当传入的参数比

  • JS中append字符串包含onclick无效传递参数失败的解决方案

    append后面跟要添加的参数 <i class="fa fa-share pointer" aria-hidden="true" title="分享" onclick="share('${img.imgId}','${img.imgTitle}','${imgCover}','http://www.liuda.tv/selectedImg?imgId=${img.imgId}')"></i> 上面这段

  • uni.getLocation和wx.getLocation方法调用无效也不返回失败的解决方案

    线上已解决问题的代码 记录时间 2022.12.10 //获得地理定位信息 uni.getLocation({ type: 'wgs84', success: function(resp) { console.log(11111); //保存纬度数据 let latitude = resp.latitude; //保存经度度数据 let longitude = resp.longitude; console.log('经度' + latitude); console.log('纬度' +long

  • 磁盘写满导致MySQL复制失败的解决方案

    案例场景 今天在线上发现一个问题,由于监控没有覆盖到,某台机器的磁盘被写满了,导致线上MySQL主从复制出现问题.问题如下: localhost.(none)>show slave status\G *************************** 1. row ***************************                Slave_IO_State:                   Master_Host: 10.xx.xx.xx              

  • Spring 静态变量/构造函数注入失败的解决方案

    目录 1.案例1:Spring对静态变量的注入为空 2.案例2:在构造函数中使用Spring容器中的Bean对象,得到的结果为空 补充 1.案例1:Spring对静态变量的注入为空 案例代码如下: @Component public class HelloWorld { /** * 错误案例:这种方式是不能给静态变量注入属性值的 */ @Value("${hello.world}") public static String HELLO_WORLD; } 解决方案一:@Value注解加

  • 解决Android加壳过程中mprotect调用失败的原因分析

    目录 问题原由 调用mprotect修改内存失败的现象 mprotect调用失败的原因分析 两种可行的解决方案 小结 问题原由 函数抽取壳是当前最为流行的DEX加壳方式之一,这种加壳方式的主要流程包含两个步骤:一.将DEX中需要保护的函数指令置空(即抽取函数体):二.在应用启动的过程中,HOOK 类的加载过程,比如ClassLinker::LoadMethod函数,然后及时回填指令. 笔者在实现抽取壳的过程中遇到了一个问题,即在步骤二回填指令之前,需要先调用mprotect将目标内存设置为“可写

  • SpringCloud超详细讲解Feign声明式服务调用

    目录 入门案例 @FeignClient注解详解 Feign Client的配置 Feign请求添加headers 负载均衡 (Ribbon) 容错机制 Hystrix支持 Sentinel支持 Feign开启容错机制支持后的使用方式 请求压缩feign.compression 日志级别 入门案例 在服务消费者导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>

  • jQuery uploadify在谷歌和火狐浏览器上传失败的解决方案

    jquery.uploadify插件是一个基于jquery来实现上传的,这个插件很好用,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器.但firefox.chrome不会这样做,他们会认为这样不安全,下面小编给大家分享有关jQuery uploadify在谷歌和火狐浏览器上传失败的解决方案. 我是这样解决的,这样所有上传文件的代码都不需要修改,改动量最小,但是有安全隐患: if (this.LoginInfo == null) { // 解决uploadif

  • 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务的方法(推荐)

    在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Apache的Http Client.Netty的异步HTTP Client, Spring的RestTemplate.但是,用起来最方便.最优雅的还是要属Feign了. Feign简介 Feign是一种声明式.模板化的HTTP客户端.在Spring Cloud中使用Feign, 我们可以做到使用HTT

随机推荐