常用注解和拦截器
常用注解
在Spring MVC中,注解和拦截器是实现请求处理、数据绑定、权限控制等核心功能的重要手段。以下是一些实际场景下的用法示例:
1. 相关注解
a. 控制器相关注解
@Controller
:标记一个类作为Spring MVC的控制器,该类中的方法将处理HTTP请求。
@Controller
public class MyController {
// ...
}
@RequestMapping
:映射HTTP请求到特定的方法上。
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable("id") Long id, Model model) {
// 获取用户并添加到模型
User user = userService.getUser(id);
model.addAttribute("user", user);
return "user"; // 返回视图名称
}
@PostMapping
public String createUser(@Validated UserForm form, BindingResult result) {
// 数据校验与创建用户逻辑
if (result.hasErrors()) {
return "create-user-form"; // 如果有错误返回表单页面
}
userService.createUser(form.toUser());
return "redirect:/users"; // 创建成功后重定向到用户列表页
}
}
b. 参数绑定注解
@RequestParam
:用于绑定HTTP请求参数到方法参数。
@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword) {
// 使用关键字进行搜索操作
List<User> users = userService.search(keyword);
// ...
}
-
@PathVariable
:用于从URL路径变量中获取值。 -
@ModelAttribute
:用于表示一个模型属性或用于方法级别的数据绑定。 -
@RequestBody
:用于将HTTP请求体的内容转换为方法参数对象(通常用于处理JSON或XML格式的数据)。
c. 自动类型转换与验证注解
@DateTimeFormat
和@NumberFormat
:用于日期和数字类型的格式化显示和接收。@Valid
或@Validated
:配合JSR-303/JSR-349 Bean Validation框架进行数据验证。
d. 视图名称相关的注解
@RestController
:表示该控制器的所有方法都直接返回HTTP响应体内容,而不是视图名。@ResponseBody
:可以放在方法或返回类型前,使得方法的结果被转换为HTTP响应体发送出去。
2. 拦截器(Interceptor)
a. 定义拦截器类
实现 HandlerInterceptor
接口,并实现其中的三个方法:
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
:在业务处理器处理请求之前执行,主要用于身份认证、授权等功能。postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
:在业务处理器处理请求执行完成后,渲染视图之前执行。afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
:在整个请求完成(包括视图渲染之后)后调用,用于资源清理工作。
@Component
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre-handling request");
return true; // 如果返回false,则后续的处理器链不再执行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("Post-handling request");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("Request processing completed");
}
}
b. 配置拦截器
在Spring MVC配置文件(如:WebMvcConfigurerAdapter
的子类或 WebMvcConfigurationSupport
的子类)中注册拦截器。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoggingInterceptor loggingInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingInterceptor)
.addPathPatterns("/**") // 匹配所有请求
.excludePathPatterns("/static/**"); // 排除静态资源
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!