遇到问题的示例
这个问题是当时要进行广告点击监测消息(微博->广告主/第三方)
- 微博广告平台将通过接口一发送用户的广告点击行为;
- 具体示例如下:监测链接请按照下方示例开发,非必填参数请根据业务需要自行 选择。
http://adv.com?campaignid=xxx&ip={ip}&ua={ua}&clicktime={clicktime}&IMP={IMP}&ad_id={ad_id}&creative_id={creative_id}
这时候就因为参数带有{}就会进行报400错误,显示参数不符合规范。
原因
这个是因为Tomcat版本比较高后,对Url参数校验更加的严格了,所以传有{}就是非法参数。
解决
1、可以降低Tomcat版本,但是这个不太现在
2、那就只能自定义嵌入式的Tomcat服务器配置,自定义解析Url
/**
该函数是一个Java组件,实现了WebServerFactoryCustomizer接口,用于自定义嵌入式的Tomcat服务器配置。在customize方法中,它将一个ConnectorCustomizer lambda表达式添加到Tomcat服务器的连接器定制器列表中。该lambda表达式为连接器设置了一个属性relaxedQueryChars,其值为.,_+{},表示在URL查询字符串中可以使用这些字符,而不会被解析为特殊字符。这有助于避免一些URL编码的问题。
*/
@Component
public class EmbeddedTomcatConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedQueryChars", ".,_+{}"));
}
}