码迷,mamicode.com
首页 > Web开发 > 详细

@QueryParam 注解 同时为POST 请求会URL把url中的%2B类似的特殊字符错误处理

时间:2019-04-18 12:20:23      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:info   请求过程   item   请求方式   奇葩   div   cto   src   内容   

之前在做接口测试的时候发现了一个很奇葩的问题。相同的参数用POSTMAN请求可以拿到正确返回,用到SpringBoot里就会报错。

后来用fiddler抓包时候发现原来接口在请求过程中,已经把请求参数错误encoding替换了。

问题的解决思路:

1、先排查自己的接口测试代码,一步步断点debug,发现没有问题

2、排查开发的接口写法,发现了这个post请求方式的接口使用了 @QueryParam 注解(网上查了一下,好像是这个注解虽然是post请求但是不会以body里的内容传参,而是用parameter传参,也就是get请求的传参方式)。

3、这时我发现了参数值中存在特殊符号,先使用接口测试代码运行了一次,把本机环境加入和fiddler同一个环境的代理,加入了下面的代码

1        System.setProperty("http.proxyHost", "127.0.0.1");
2        System.setProperty("https.proxyHost", "127.0.0.1");
3        System.setProperty("http.proxyPort", "9999");
4        System.setProperty("https.proxyPort", "9999");`

发现了错误的请求入参参数技术图片

现在定位到了问题原因就是因为框架会对URL进行二次encoding,存在问题是对于Url的path参数存在特殊字符进行转换,导致后台无法返回正确结果

两个办法解决:

1、和开发商量改接口写法,post使用body传参,不使用@QueryParam 注解

2、在自己的接口测试代码里重新定义RestTemplate ,加入这行代码

RestTemplate restTemplate = new RestTemplate();
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory();
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
restTemplate.setUriTemplateHandler(factory);

成功解决encoding的问题

 

@QueryParam 注解 同时为POST 请求会URL把url中的%2B类似的特殊字符错误处理

标签:info   请求过程   item   请求方式   奇葩   div   cto   src   内容   

原文地址:https://www.cnblogs.com/hongweitester/p/10728750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!