SpringBoot錯誤提示400狀態(tài)問題
SpringBoot錯誤提示400狀態(tài)
錯誤提示400狀態(tài)有兩種原因
1.路徑找不到:
如果是路徑找不到的錯誤,則可能是controller類的跳轉頁面寫錯了。
2.提交的數據格式不對
當我們提交數據時如果出現400狀態(tài),則大多數情況下是屬于數據格式不對,比如我們的日期格式,SpringBoot的日期格式要求是yyyy/MM/dd,使用 / 分割,所以當我們使用 - 就會出現400錯誤提示。
提交數據時出現400狀態(tài)的錯誤提示
如下圖:
在idea中的錯誤提示:
這時候根據提示,我們可以快速知道是日期格式不對,則我們只需要去修改數據格式即可,在application.properties或者application.yml去指定日期格式化。
SpringBoot、網關接受請求直接報400
主要原因:
這個問題是由于Tomcat的新版本中增加了一個新特性,就是嚴格按照 RFC 3986規(guī)范進行訪問解析,而 RFC 3986規(guī)范定義了Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符(RFC3986中指定了以下字符為保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
SpringBoot接受請求報400
在發(fā)送請求的URL中包含一些特殊字符時,可以添加一個配置類進行處理:
@Configuration public class TomcatConfig { @Bean public TomcatServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.addConnectorCustomizers((Connector connector) -> { connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}"); connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}"); }); return factory; } }
網關轉發(fā)請求時直接報400
正常來說網關這里也是像SpringBoot做配置就可以了,但是由于我的業(yè)務要求,是通過網關轉發(fā)路徑到子服務去獲取靜態(tài)資源,而轉發(fā)的時候路徑是這樣的:
http://ip:port/track/api/video/Track_Calculate/Track_Data/video/[ip][59][20221209094254].mp4
包含了一些相關的特殊字符“[]”網關在做轉發(fā)的時候,直接報了400,過濾器什么的也都不進入,所以請求都攔截不到。
最后是將視頻的path路徑使用URLEncode做處理轉成UTF8再返回給前端,然后前端將視頻地址請求過來的時候網關就可以正常轉發(fā)了。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于Java?利用Mybatis實現oracle批量插入及分頁查詢
這篇文章主要介紹了基于Java?利用Mybatis實現oracle批量插入及分頁查詢,文章圍繞主題展開詳細的內容介紹,需要的小伙伴可以參考一下2022-07-07重試框架Guava-Retry和spring-Retry的使用示例
spring-retry 和 guava-retry 工具都是線程安全的重試,能夠支持并發(fā)業(yè)務場景的重試邏輯正確性,本文主要介紹了重試框架Guava-Retry和spring-Retry的使用示例,感興趣的可以一下2023-09-09