美文网首页Spring BootSpringBoot精选
spring url 参数编码、解码

spring url 参数编码、解码

作者: freelands | 来源:发表于2017-08-16 20:52 被阅读1518次
    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 url 参数编码、解码

        本文链接:https://www.haomeiwen.com/subject/unzirxtx.html