Property ‘spring.http.encoding.charset‘ is Deprecated: Use ‘server.servlet.encoding.charset‘ instead

博客指出将Spring Boot从2.2.3版本升级到2.4.0版本后,配置文件中的配置报错,提示'Property 'spring.http.encoding.charset' is Deprecated',并建议使用'server.servlet.encoding.charset'替代。

springboot 2.2.3 版本换成 2.4.0之后配置文件中的配置报错,提示Property 'spring.http.encoding.charset' is Deprecated: Use 'server.servlet.encoding.charset' instead

#  http:
#    encoding:
#      charset: UTF-8
#      enabled: true
#      force: true

修改为

server:
  port: 8080
  servlet:
    context-path: /batch
    encoding:
      charset: UTF-8
      enabled: true
      force: true

 

`HandlerInterceptorAdapter` 是 Spring Framework 早期版本中用于简化 `HandlerInterceptor` 接口实现的一个适配器类。从 **Spring 5.3 开始,`HandlerInterceptorAdapter` 被标记为 @Deprecated**(弃用),并且在 **Spring 6 中已被移除**。 ### ✅ 替代方案: 你现在应该直接实现 `org.springframework.web.servlet.HandlerInterceptor` 接口,而不是继承 `HandlerInterceptorAdapter`。 由于 `HandlerInterceptor` 接口中定义的方法都有默认实现(从 Java 8 的 default 方法特性开始支持),你只需重写你需要的方法即可,无需实现所有方法,这使得它和以前使用 `HandlerInterceptorAdapter` 一样方便。 --- ### 🛠 示例:如何替换 `HandlerInterceptorAdapter` #### ❌ 旧代码(已弃用): ```java import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class MyInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("Pre-handling..."); return true; } } ``` #### ✅ 新代码(推荐方式): ```java import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.stereotype.Component; @Component public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("Pre-handling..."); return true; // 继续执行后续操作 } // 可选:重写 postHandle 和 afterCompletion } ``` > 注意:如果你使用的是 Spring 6+,包名也从 `javax.servlet` 变为了 `jakarta.servlet`,请确保你的依赖(如 Servlet API)是 Jakarta EE 版本。 --- ### 🔍 注册拦截器(配置类方式) ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { private final MyInterceptor myInterceptor; public WebConfig(MyInterceptor myInterceptor) { this.myInterceptor = myInterceptor; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor).addPathPatterns("/api/**"); } } ``` --- ### ⚠️ 为什么被弃用? Spring 团队弃用 `HandlerInterceptorAdapter` 的主要原因包括: 1. **Java 8+ 支持接口中的 default 方法**:`HandlerInterceptor` 接口本身提供了 `preHandle`、`postHandle`、`afterCompletion` 等方法的默认空实现(通过 default 关键字),因此不再需要一个抽象类来提供默认实现。 2. **减少继承层级**:避免不必要的类继承,鼓励更灵活的组合设计。 3. **简化框架结构**:减少维护成本,统一行为。 --- ### 💡 小贴士 - 如果你在项目中看到警告 `'HandlerInterceptorAdapter' is deprecated`,说明你应该升级代码以符合现代 Spring 实践。 - 在 Spring Boot 2.7+ 或 Spring 6+ 项目中,该类可能已经不可用,请务必迁移。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值