gpt4 book ai didi

java - Spring Boot 不接受括在括号中的列表参数

转载 作者:行者123 更新时间:2023-12-04 10:29:18 26 4
gpt4 key购买 nike

我有以下极其简单的 SpringBoot 程序

// APIEndpoints.java

// Imports!

public class APIEndpoints {
@PostMapping("deduplicate")
public String deduplicate(@RequestParam(value = "data") String data) {
return data;
}
}
// RestServiceApplication.java

@SpringBootApplication
public class RestServiceApplication {

public static void main(String[] args) throws SQLException {
SpringApplication.run(RestServiceApplication.class, args);
}
}


我可以通过 ./gradlew bootRun 启动 springboot 服务器,并已验证服务器正在通过其他端点工作。

这是我的问题:使用 postman 发送帖子请求,以下内容顺利进行
localhost:8080/deduplicate?data=1,23,4,5

但是,这个失败并出现错误:“HTTP 400:错误请求”
localhost:8080/deduplicate?data=[1,23,4,5]

这似乎是不受欢迎的行为,它 doesn't seem to be url 格式的基本限制或类似的东西。

导致此错误的原因是什么,如何设置 Spring Boot 以接受括号中的列表?

最佳答案

所以出现这个错误的主要原因是字符“[”和“]”。此答案中有关 URL 和 URI 允许字符的更多详细信息:Which characters make a URL invalid? .

最好的方法(遵循标准) - 在客户端编码 URL:

encodeURL("localhost:8080/deduplicate?data=[1,23,4,5]")
>localhost:8080/deduplicate?data=%5B1%2C23%2C4%2C5%5D

使用 postman ,您想在查询参数窗口中选择您的数据,单击鼠标右键并选择“EncodeURIComponent”:

Example of encoding using postman
将您的网址转移到
 localhost:8080/deduplicate?data=%5B1%2C23%2C4%2C5%5D

并且它可以被 tomcat 成功读取(我想你将它用作 servlet 容器)。

如果你不能改变你的前端行为,你可以使用

relaxedQueryChars / relaxedPathChars



在连接器定义中允许这些字符。
使用 java 和 spring(如果嵌入了 tomcat):
    @Component
public class TomcatWebServerSettings implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(connector ->
{
connector.setAttribute("relaxedQueryChars", "[]");
});
}
}

或者您可以添加 relaxedQueryChars server.xml (%TOMCAT_FOLDER%/conf/) 下的属性:
  <Connector 
//other params,
relaxedQueryChars="[,]"
/>

此外,您可以将您的 tomcat 降级到 7.0.76 以下的版本(强烈不推荐 - 安全原因)。

关于java - Spring Boot 不接受括在括号中的列表参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60479864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com