1.SpringBoot从2.2.5升级到2.7.2问题总结
2.深入浅出Spring原理及实战「技术原理」为大家介绍一下Spring中的源码Ant路径匹配工具组件AntPathMatcher
SpringBoot从2.2.5升级到2.7.2问题总结
升级SpringBoot从2.2.5至2.7.2过程中,需关注以下关键问题及其解决方案:
1. **hibernate-validator包下的源码类报错**:SpringBoot 2.3以后,不再在spring-boot-starter-web中引入hibernate-validator,源码需手动引入。源码在父pom中加入软件中心模块,源码子模块无需重复添加。源码左右躲避小游戏源码大全
2. **ErrorController无getErrorPath方法**:直接删除此方法即可。源码
3. **logback和log4j冲突**:排除SpringBoot的源码logging配置,以解决版本兼容问题。源码
4. **循环依赖**:调整WebMainConfig类,源码移除导致循环依赖的源码方法和属性handlerAdapter,采用懒加载注解@Lazy,源码避免循环引用,源码若难以消除则设置spring.main.allow-circular-references=true。源码
5. **swagger错误**:遇到“Failed to start bean 'documentationPluginsBootstrapper'”时,源码配置application.properties文件使Spring Boot使用AntPathMatcher路径匹配策略。升级Swagger到最新版本,并调整配置类、过滤器路径等。opencellular源码
6. **跳转登录页出错**:解决方案与5相同,即配置路径匹配策略和升级Swagger。
7. **日期转换出错**:因数据库datetime类型数据转换为LocalDateTime,修改MyBeanProcessor中的type2Bean方法,增加对LocalDateTime和LocalDate的处理。
8. **flyway版本限制**:匹配flyway-core与数据库版本,如使用MySQL 5.7,确保flyway-core版本兼容。
9. **JUnit运行后没有反应**:升级后默认使用junit5,managedspy 源码如依赖中存在junit4冲突,移除junit4的jar包。
. **json中Long类型字段精度丢失**:默认消息转换器中长整型字段可能被其他转换器接管。解决方法是调整自定义消息转换器在列表中的位置,置于首位,确保其生效。
深入浅出Spring原理及实战「技术原理」为大家介绍一下Spring中的Ant路径匹配工具组件AntPathMatcher
Spring框架中的路径匹配规则遵循Ant标准,这不仅体现在SpringMVC中,整个Spring框架的abstract 源码路径解析亦是如此。具体实现可见于`org.springframework.util.AntPathMatcher`类,其遵循Ant的匹配规则。
在Spring MVC中,我们常使用如`.jsp`、`//dir/file.`、`/example`、`/app/.x`等格式的URL地址。负责判断是否匹配的工具类便是`AntPathRequestMatcher`。该类内部遵循Ant Path Matcher的cvdrawcontours 源码匹配规则,提供了一套定义标准的符号规则。
`?`符号要求为一个字符,且不能是路径分隔符`/`。而`*`符号能够匹配多个任意字符,但不能用来替代`.`,因为`*`代表的字符串不能表示目录或路径本身。例如,`*.jsp`可以匹配多个以`.jsp`结尾的文件名,但`*`无法替代`.`实现`dir/file.jsp`这样的路径。
`**`符号代表0个或多个目录,但它不需要包含`/`。如`/app/**`可以匹配`/app/`、`/app/dir`等路径。
`{ spring:[a-z]+}`示例展示了更复杂的规则,如在权限校验中,设置管理员的访问路径为`/admin/**`,意味着任何以`/admin/`开头的URI操作地址都应匹配。这里的`{ spring:[a-z]+}`匹配以`spring`开头、后跟多个小写字母的字符串。
`PathMatcher`接口主要用于判断路径是否匹配模式,并解析出路径参数。在实际使用中,通过`AntPathMatcher`类的有参构造方法初始化该对象时,需要注意传递正确的路径分隔符参数`pathSeparator`,以防止在不同操作系统下匹配文件路径出错。
匹配操作遵循最长匹配原则,即越精确的模式优先级越高。例如,URL请求`/app/dir/file.jsp`在存在模式`//.jsp`和`/app/dir/.jsp`时,会优先使用`/app/dir/*.jsp`进行匹配。
若觉得`AntPathMatcher`功能不够强大,可以考虑使用`RegexRequestMatcher`,它支持使用正则表达式进行URL地址匹配。对于更定制化的路由匹配需求,开发者还可以自行重写`RequestMatcher`接口。
`match`与`matchStart`方法的区别在测试用例中会较为明显,前者用于判断整个路径是否匹配模式,后者则仅关注路径的开始部分。`extractPathWithinPattern`方法用于从模式中提取路径,而`extractUriTemplateVariables`方法则用于解析URI模板变量,最后`combine`方法则用于组合匹配结果。