问题原因
今天在优化代码的时候,将一行代码从UrlEncoded.encodeString改成了URLEncoder.encode,本以为想,设置一个编码方式而已。只要都用utf-8应该结果一样。
但是没想到,就这一行修改,导致了原来调用接口没问题的地方接口调用失败了,接口方接日志看到的参数就和提交的不一致,排查半天无果,换了回来,发现又没问题了。
那么,最不可能的真相就只有一个,UrlEncoded.encodeString和URLEncoder.encode的结果不一致。
解题思路
那么,做个试验吧:
测试1号 (1).png
测试1号 (2).png
从该结果,发现编码结果是一样的。
那么,如果存在特殊字符呢?接下来试试一个JSON:
测试2号(1).png
测试2号(2).png
我们发现对于“.”编码的时候UrlEncoded.encodeString会编码成“%2E”,而URLEncoder.encode不会编码,所以这就导致了当我改为URLEncoder.encode编码时,接口接收端使用的是UrlEncoded对应的解码方式,解析的参数不全,从而内部错误。
解决办法
因为已经很晚了,所以最终我换回了UrlEncoded.encodeString的编码方式解决这个问题,并将该问题记录下来。
希望各位以后遇到类似场景的时候,可以意识到会存在这种情况。
网友评论