常用注解和拦截器

常用注解

在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/**"); // 排除静态资源
    }
}

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值