spring url 参数编码、解码

encoder decoder.png
背景 :

今天遇到一个类似于下面这样的一个问题,后端写了一个 GET resful 接口,请求的时候需要带一个test参数,当请求参数里有+号的时候,后端接口把+号替换成了 空字符串。

客户端请求如下:

curl localhost/rest/test?test=123456+

后端接口如下:

@RestController
@RequestMapping("/rest")
public class TestController {

  @RequestMapping("/test")
  public ResponseEntity<String> test(@RequestParam final String test){
    return ResponseEntity.ok("Requested: " + test);
  }
}
后端调试接口获得的值为
'123456 '

之所以出现这个原因就是,+号在url参数里的时候必须要进行编码,否则后端就会出现问题,把+号,当做空字符串来进行处理。但是如果前端调用接口的时候进行了编码,那么后端就需要进行相应的解码,否则也会出问题。

把url里的参数进行编码后变成下面这样了:

123456%2b

后端接口debug的时候取到的值如下:

123456+

可以看到,后端获取了正确的数据,或许有些人感觉很奇怪,我并没好对参数进行解码,为什么还是可以获取到正确的数据呢?
其实spring @RequestParam这个注解标识的参数,会自动的进行解码,spring帮我们做了这样一件事情。

如果用户在服务端想对url参数进行编码或者解码怎么办呢?

String encodedParam = URLEncoder.encode(test, "UTF-8"); //encode
String decodedParam = URLDecoder.decode(test, "UTF-8"); //decode
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,891评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,947评论 6 342
  • 提笔写这篇文章,名字还取得这么难听,一看就是没工作有工作的大妈大姐抱怨生活如何艰难。其实也不是也是。是我看...
    夏又一夏阅读 155评论 0 0
  • 习惯在养成之初就像一根看不见的细线,但是我们每重复一次习惯,这根线就会变得更粗壮一点,最终它会变成一条粗大的缆绳,...
    李子能阅读 171评论 0 2
  • (一) 陶晶不相信会有从来不笑的人,偏偏褚言打破了她的认知。在一起一年的时间里,陶晶不止一次怀疑,褚言是否真的喜...
    宓笙阅读 553评论 1 2