SpringBoot +java.lang.IllegalArgumentException: The character [_] is never valid in a domain name
文章目录
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
前言
当请求的域名中包含下划线[_],springboot中是会报错,跟踪了错误日志,是springboot内嵌的tomcat报的错:非法字符。。
所以说一开始就域名规范,可以避免后续的很多坑。
解决方案
问题不大,不要慌
方案A: 降低springboot的版本
- 定位了是springboot内嵌的问题后,上网google了下,比较低版本的tomcat版本是没有执行那么严格的字符限制的;所以为了老版本继续维护,把springboot的版本下调一点:如下为gradle中springboot gradle 插件的版本配置
buildscript {
repositories {
// mavenLocal()
// mavenCentral()
maven { url 'http://192.168.25.215:8081/repository/maven-public/'}
}
dependencies {
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE'
}
}
- 修改springboot版本为1.4.2.RELEASE,其对应的内嵌tomcat版本为8.5.6(如何快速查看gradle依赖的层级视图及其版本,推荐plugin:GradleView)下载插件后,可在IDEA顶部菜单那里进行打开视图
如下图所示:
可以查看Tomcat的版本:
问题根源: 之前用的spirngBoot版本为1.5.20,其对应的tomcat版本为8.5.39,其对域名进行了严格的检查!!(其实这个是好事呀)
但为了兼容老版本~~
不想更新springboot的版本,降低版本代码修改量太大,可以考虑第二种方案 哈哈~
方案B: 配置springboot内嵌tomcat版本
- gradle脚本(build.gradle)中添加如下配置即可:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.apache.tomcat.embed') {
details.useVersion '8.5.6'
}
}
}
Bingo~~