我正在使用第 3 方網格,它在輸入字符時生成以下 GET API:
http://localhost:4200/api/v1/driver/getDriverListForDropDown?firstName=[{"field":"DriverCode","operator":"startsWith","value":"12345", "caseSensitive":false}]
生成的請求引數:
firstName:[{"field":"DriverCode","operator":"startsWith","value":"*","caseSensitive":false}]
我正在嘗試在 Spring Boot 上創建一個休息 API,但無法訪問該 API。
我嘗試了以下方法:
@GetMapping(path = "/getDriverListForDropDown")
public ResponseEntity<RestApiResponse<List<DriverDataForDropDown>>> getDriverListForDropDown(
@ApiIgnore Context context, @RequestParam(value="firstName") List<DriverDropdownFilterRequest> firstName)
DriverDropdownFilterRequest :
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
@JsonIgnoreProperties(ignoreUnknown = true)
@Builder(toBuilder = true)
public class DriverDropdownFilterRequest
{
String field;
String operator;
String value;
}
但我總是收到 400 錯誤,并且在后端出現以下錯誤:
java.lang.IllegalArgumentException:在請求目標中發現無效字符。有效字符在 org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:468) ~[tomcat-embed-core-9.0.29.jar:9.0.29] 的 RFC 7230 和 RFC 3986 中定義.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.29.jar:9.0.29] 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java: 65) [tomcat-embed-core-9.0.29.jar:9.0.29] 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) [tomcat-embed-core-9.0.29.jar :9.0.29] 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) [tomcat-embed-core-9.0.29.jar:9.0.29] 在 org.apache。 tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:
我嘗試了幾種選擇,但沒有任何效果。請幫忙。
uj5u.com熱心網友回復:
我想,正如你的例外所暗示的那樣,檢查你的請求格式是否有效(也許 firstName 引數中的 char '[' 和 ']' 相互矛盾),或者你的 tomcat 版本支持你的格式,請參閱這篇文章。
建議:也許您可以通過創建新引數(不僅是名字)或通過設定能夠接受 json 主體的 API 點來將它們分開,而不是為引數分配類似哈希的值。例如
@GetMapping(path = "/get")
public ResponseEntity<...> get(..., @RequestBody Map<...> firstname)
{
.
.
.
}
干杯!
uj5u.com熱心網友回復:
問題是第 3 方沒有正確編碼引數,并且 tomcat 拒絕了這些字符。
即使在 application.properties 中添加輕松的字符也不起作用。
唯一有效的解決方案是添加以下配置:
@Component
public class TomcatWebServerCustomizer implements
WebServerFactoryCustomizer<TomcatServletWebServerFactory>
{
/**
* Customize the specified
* @param factory the web server factory to customize
*/
@Override
public void customize(TomcatServletWebServerFactory factory)
{
factory.addConnectorCustomizers(connector ->
connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}"));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420261.html
標籤:
