最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot URL帶有特殊字符([]/{}等),報(bào)400錯(cuò)誤的解決

 更新時(shí)間:2022年02月16日 11:01:11   作者:fang1344  
這篇文章主要介紹了SpringBoot URL帶有特殊字符([]/{}等),報(bào)400錯(cuò)誤的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot URL帶有特殊字符([]/{}等),報(bào)400

今天使用springboot開(kāi)發(fā)接口,版本——2.1.3.RELEASE,需要接收json格式的字符串?dāng)?shù)據(jù),json串中只有大括號(hào)時(shí)還正常,沒(méi)有400,但是在傳json數(shù)組時(shí),帶有中括號(hào)[],攔截器都不進(jìn)就直接400,經(jīng)過(guò)一陣排查,json格式等都沒(méi)有問(wèn)題。

最后百度得知Tomcat的高版本(具體從哪個(gè)版本開(kāi)始沒(méi)有具體了解)中增加了一個(gè)新特性,就是嚴(yán)格按照 RFC 3986規(guī)范進(jìn)行訪問(wèn)解析,而 RFC 3986規(guī)范規(guī)定Url中只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個(gè)特殊字符以及所有保留字符(RFC3986中指定了以下字符為保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。

解決辦法有兩種,轉(zhuǎn)義和配置Tomcat

轉(zhuǎn)義字符就不說(shuō)了,下面貼上2.1.3.RELEASE版本Springboot的配置方法:

@Configuration
public class XxxConfig   {
    @Bean
    public ServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory();
        fa.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}"));
        return fa;
    }
}

請(qǐng)求參數(shù)包含[]特殊符號(hào)的問(wèn)題

springBoot 版本 2.0.4.RELEASE

當(dāng)參數(shù)含有特殊符號(hào) [] 報(bào)錯(cuò)400

解決方案類(lèi)似springMvc修改tomcat配置,springBoot 啟動(dòng)類(lèi)中添加 bean

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class SigncallbackApplication {
    public static void main(String[] args) {
        SpringApplication.run(SigncallbackApplication.class, args);
    }
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory (){
        // 修改內(nèi)置的 tomcat 容器配置
        TomcatServletWebServerFactory tomcatServlet = new TomcatServletWebServerFactory();
        tomcatServlet .addConnectorCustomizers(
                (TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}")
        );
        return tomcatServlet ;
    }
}

XXXController1.java

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
/**
 * @author: ma dengling
 * @create: 2020-04-13 11:09
 * @Desc:
 */
@RestController
@RequestMapping(value = {"/signcallback1"})
public class TpnHtqzLogController1 {
    private static final Logger log = LoggerFactory.getLogger(TpnHtqzLogController1.class);
    @RequestMapping(value = "/htqz_log")
    public String htqzLog(String jsonString) {
        log.info(jsonString);
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        String callBackAction = jsonObject.getString("action");
        return callBackAction;
    }
}

postman調(diào)用接口

控制臺(tái)輸出結(jié)果

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

辉南县| 西和县| 会理县| 四平市| 海兴县| 华安县| 鸡泽县| 巴南区| 普兰县| 静乐县| 通化县| 方正县| 石楼县| 宁河县| 吉水县| 平乡县| 武邑县| 安龙县| 江安县| 绩溪县| 余姚市| 微博| 无极县| 汉沽区| 伊宁市| 松桃| 广河县| 武穴市| 虎林市| 东丰县| 鞍山市| 西安市| 罗田县| 阜康市| 扶绥县| 松原市| 宣汉县| 乌拉特前旗| 耒阳市| 陈巴尔虎旗| 常山县|