springboot接收http请求,解决参数中+号变成空格的问题

目录
  • springboot接收http请求,参数中+号变成空格
    • 小插曲
    • 解决get请求中的问题
    • 解决post请求中的问题
  • SpringBoot问题笔记:http请求参数含有特殊符号[]
    • 解决方法:修改tomcat配置

springboot接收http请求,参数中+号变成空格

小插曲

+ 在执行URLEncoder.encode(String,"UTF-8")编码后会变成 %2B

+ 在执行URLDecoder.decode(String,"UTF-8")编码后会变成 空格

解决get请求中的问题

1.如前端发送的URL中含有“+”那么使用springboot框架接受的参数中 “+”会变成 空格

此时的解决办法是 URLEncoder.encode(参数,"UTF-8")

解决post请求中的问题

1.如前端发送的URL中含有“+”那么使用springboot框架接受的参数中 “+”不会变成 空格

此时直接使用该参数就可以

SpringBoot问题笔记:http请求参数含有特殊符号[]

请求报错,调试控制器函数没有触发。

怀疑是请求参数中含有字符 [ ]

由博客了解到是由于Tomcat的新版本中增加了一个新特性,严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ])。

解决方法:修改tomcat配置

@SpringBootApplication
@EnableAsync
public class MainApplication {
    public static void main(String[] args)
    {
        SpringApplication.run(MainApplication.class, args);
    }
    //允许http请求含有字符[]{}
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory (){
        // 修改内置的 tomcat 容器配置
        TomcatServletWebServerFactory tomcatServlet = new TomcatServletWebServerFactory();
        tomcatServlet.addConnectorCustomizers(
                (TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]")
        );
        return tomcatServlet ;
    }
}

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

(0)

相关推荐

  • SpringBoot处理请求参数中包含特殊符号

    今天写代码遇到了一个问题,请求参数是个路径"D:/ExcelFile",用postman测试时遇到的下图中的报错 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986   at org.apache.coyote.http11.Http11InputBuffer

  • 详解SpringBoot Controller接收参数的几种常用方式

    第一类:请求路径参数 1.@PathVariable 获取路径参数.即url/{id}这种形式. 2.@RequestParam 获取查询参数.即url?name=这种形式 例子 GET http://localhost:8080/demo/123?name=suki_rong 对应的java代码: @GetMapping("/demo/{id}") public void demo(@PathVariable(name = "id") String id, @Re

  • SpringBoot项目如何把接口参数中的空白值替换为null值(推荐)

    问题发生 我们公司代码生成的时候,查询列表统一都是使用了setEntity() ,查询写法如下: public List<BasReservoirArea> selectList(BasReservoirArea basReservoirArea) { QueryWrapper<BasReservoirArea> where = new QueryWrapper<>(); where.setEntity(basReservoirArea); return baseMap

  • URL的参数中有加号传值变为空格的问题(URL特殊字符)

    1.URL特殊字符需转义 2.空格换成加号(+)   3.正斜杠(/)分隔目录和子目录   4.问号(?)分隔URL和查询   5.百分号(%)制定特殊字符   6.#号指定书签   7.&号分隔参数 转义字符的原因: 如果你的表单使用get方法提交,并且提交的参数中有"&"等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数来看待.例如 表单的action为list.jsf?act=Go&state=5 则提交时通过reques

  • 关于Springboot | @RequestBody 接收到的参数对象属性为空的问题

    背景 今天在调试项目的时候遇到一个坑,用Postman发送一个post请求,在Springboot项目使用@RequestBody接收时参数总是报不存在,但是多次检查postman上的请求格式以及项目代码都没有问题 Postman: 请求参数: { "firstName":"fdsaf", "lastName":"dfasdf" } Controller: Entity 通过debug模式可以发现传进到实体的参数都为null

  • springboot接收http请求,解决参数中+号变成空格的问题

    目录 springboot接收http请求,参数中+号变成空格 小插曲 解决get请求中的问题 解决post请求中的问题 SpringBoot问题笔记:http请求参数含有特殊符号[] 解决方法:修改tomcat配置 springboot接收http请求,参数中+号变成空格 小插曲 + 在执行URLEncoder.encode(String,"UTF-8")编码后会变成 %2B + 在执行URLDecoder.decode(String,"UTF-8")编码后会变成

  • springboot:接收date类型的参数方式

    目录 springboot:接收date类型的参数 springboot 传递Date等实体参数时候报错 springboot:接收date类型的参数 今天有个postmapping方法,地址都正确,就是死活进不去,真是奇怪了. 终于从日志中得出些端倪,见下: 只有这个属性报错,恰恰这个属性是Date型. 这句话说得更清楚: "defaultMessage":"Failed to convert property value of type 'java.lang.String

  • SpringBoot接收参数使用的注解实例讲解

    目录 1.基本介绍 2.接收参数相关注解应用实例 @PathVariable 使用 @RequestHeader 使用 @RequestParam 使用 @CookieValue 使用 @RequestBody 使用 3.复杂参数 1.基本介绍 2.复杂参数应用实例 4.自定义对象参数-自动封装 1.基本介绍 2.自定义对象参数-应用实例 1.基本介绍 SpringBoot 接收客户端提交数据/参数会使用到相关注解 详 解 @PathVariable . @RequestHeader . @Mo

  • SpringBoot用实体接收Get请求传递过来的多个参数的两种方式

    目录 一.Controller层不带任何注解接收参数 二.Controller层通过@ModelAttribute接收参数 最近项目中Controller层查询接口需要通过实体来接受前端传过来的多个参数(Get请求),这个问题困扰了我很久,之前在第二家公司的时候,就因为我后端是Get请求,并且是通过实体去接收前端参数的,导致我当天上线搞到半夜没搞好,这次又遇到,势必解决它. 一年前,通过查看大量的坑爹文章,发现网上没有一篇有效的,这次通过阿里主管的协助,成功的通过实体接收到了Get请求传递过来的

  • 解决Springboot get请求是参数过长的情况

    问题原因 Springboot get请求是参数过长抛出异常:Request header is too large 的问题 错误描述 java.lang.IllegalArgumentException: Request header is too large 解决方案 请求头超过了tomcat的限值.本来post请求是没有参数大小限制,但是服务器有自己的默认大小. 设置服务器大小: 1.普通tomcat 在server.xml中 <Connector connectionTimeout=&quo

  • SpringBoot如何接收Post请求Body里面的参数

    目录 如何接收Post请求Body里的参数 ApiPost测试数据 Java接收数据 SpringBoot获取参数常用方式 参数在body体中 PathVaribale获取url路径的数据 RequestParam获取请求参数的值 如何接收Post请求Body里的参数 ApiPost测试数据 {     "list": [         "{'time':'xxxxx','distinct_id':'xxxx','appId':'xxxx'}",        

  • 完美解决js传递参数中加号和&号自动改变的方法

    在action中用get方法获得参数,如果参数里有"+",要做处理,否则到后台会变成空格. 解决方案: 1 .改用post方法: 2 .在 js 里用 url = encodeURI(encodeURI(XXX)) ,后台再解码一次: 3 .传递参数的时候直接替换转义,或者直接写转义后的代码 data =  "a + b": data = data.replace(/\+/g, "+"); data = data.replace(/\&/

  • vue中循环请求接口参数问题及解决

    目录 vue 循环请求接口参数问题 vue for循环请求同一url参数不同但参数覆盖 vue 循环请求接口参数问题 今天遇到一个循环请求问题 先上代码 function(){       var num = this.eventType.length;       for (var i = 0; i < num; i++) {         arr.eventType = this.eventType[i];         console.log(arr.eventType, i, "

随机推荐