经常遇到前台使用get方式查询,传递复杂对象到后台的情况,需要使用到中括号,如果直接使用中括号,后台tomcat服务器不识别,需要前台进行转码 为 %5B %5D,如果使用浏览器请求,会导致浏览器再次将%转码,为了解决该问题,可以配置tomcat识别不转码的中括号,配置如下
1. 如果是使用springboot方式启动,可以在application.yml增加配置
server.tomcat.relaxed-query-chars: [,]
2. 有的版本使用1不生效,可以增加配置类
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
@Component
public class EmbeddedTomcatConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedQueryChars", "[]"));
3. 外部tomcat启动,修改server.xml文件,connector增加对应的属性 relaxedQueryChars="[]"
<Connector connectionTimeout="20000" port="8080" relaxedQueryChars="[]" protocol="HTTP/1.1" redirectPort="8443"/>
4.前台使用get传递复杂对象到后台
如果是数组中包含简单类型,例如 字段fieldA,可以使用多个字段传值,如果是对象中的属性,可以使用[],如果是数组中的对象,可以使用 对象[index].field,具体如下图