Spring MVC 注解

Spring MVC 注解

配置类

@EnableWebMvc

开启对 Spring MVC 注解的解析

Controller

@Controller

标注为 Controller,Spring 提供的。
在Spring MVC中使用会用于找到并解析 Controller 的请求方法

@RestController

@Controller + @ResponseBody 是复合注解,是在sprnig4.0后新加入的一个注解,同样用于标注为控制器的组件,如果当前Controller中所有请求方法都需要使用@ResponseBody注解来响应,那么就可以使用它标注在类上,而不需要在每一个方法上标注@ResponseBody

用途

需要返回 vo 对象或者 实体对象时

缺点

会优先对Controller中所有方法的返回值进行序列化,导致转发和重定向失效,因为Spring MVC无法解析到返回值中的用于标注转发和重定向的字符串

@ResponseBody

在类上标注,会对所有方法的返回值进行序列化,也可以在方法上标注

方法

@RequestMapping

将请求映射到方法上
value:格式"/请求"
method:指定请求类型(比如RequestMethod.GET)

@GetMapping 和 @PostMapping

将请求映射到方法上,继承 @RequestMapping,同时指定类请求类型,比如如下
file
value:格式"/请求"

@InitBinder

标注格式化器

日期格式化器

@InitBinder
public void regFormatter(WebDataBinder binder) {
    binder.addCustomFormatter(
            new DateFormatter("yyyy-MM-dd"));
}

@ExceptionHandler

用于处理Controller局部异常处理
value:处理异常的类型

/**
 * 局部异常处理(处理非业务异常,如数据库异常等)
 * @param e
 * @return
 */
@ExceptionHandler(RuntimeException.class)
public ResultVO handleRuntimeException(RuntimeException e) {
    //记录异常日志
    log.error(e.getMessage());
    //再将异常转换为提示信息
    ResultVO vo = new ResultVO();
    vo.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
    vo.setMessage("服务器内部错误,请稍后尝试");
    return vo;
}

属性

@RequiredArgsConstructor

不是 Spring MVC 提供的注解,是lombok提供的。
会根据private final的属性生成包含这些属性的构造方法,用于Service实现类的注入

全局异常处理类(类似于切面)

这个类中定义所有的异常处理方法,也可以理解为全局异常通知
异常处理的优先级是:小(具体) -> 大(Exception)

@RestControllerAdvice

标注为一个全局异常处理类
value:根据包名找到 Controller类 对其进行异常捕获

方法

@ExceptionHandler

用于标注为全局异常处理方法
value:处理异常的类型