@RestControllerAdvice注解的使用,及全局异常铺捕获,初始化绑定器

前言

@RestControllerAdvice是Controller的增强   常用于全局异常的捕获处理 和请求参数的增强

继承@ControllerAdvice、@ResponseBody等注解 它返回的数据是JSON格式的。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ControllerAdvice
@ResponseBody
public @interface RestControllerAdvice {

    //可以指定一个或多个包、类,这些包及其子包下的所有Controller都被该@ControllerAdvice管理。
    
    //可以指定异常处理要扫描的包
    //@RestControllerAdvice("com.hyl.cnt")、
    //@RestControllerAdvice(basePackages={"org.my.pkg"}
    @AliasFor("basePackages")
    String[] value() default {};

    //这个和上面作用一样
    @AliasFor("value")
    String[] basePackages() default {};

    //指定一个或多个 Controller 类,这些类所属的包及其子包下的所有 Controller 
    //@RestControllerAdvice (basePackageClasses = {MyController.class})
    Class<?>[] basePackageClasses() default {};

    //指定一个或多个 Controller 类
    //@RestControllerAdvice (assignableTypes = {MyController.class})
    Class<?>[] assignableTypes() default {};
    
    //指定一个或多个 被这些注解所标记的 Controller 会被管理
    //@RestControllerAdvice (annotations = {RestController.class})
    Class<? extends Annotation>[] annotations() default {};
}
//当应用多个选择器时,应用OR逻辑 - 意味着所选的控制器应匹配至少一个选择器。

全局异常捕获案例

@RestControllerAdvice(assignableTypes = {MyController.class})
@Slf4j
public class GlobalExceptionHandler {

    /**
     * ExceptionHandler 处理 Exception 异常
     * HttpServletRequest httpServletRequest 请求request
     * Exception e 异常对象
     */
    @ExceptionHandler(value = Exception.class)
    public String exceptionHandler(HttpServletRequest httpServletRequest, Exception e) {
        log.error("GlobalExceptionHandler 服务错误");
        return "GlobalExceptionHandler 服务错误";
    }


    /**
     * 处理运行异常 RunctimeException
     */
    @ExceptionHandler(RuntimeException.class)
    public ResponseEntity<String> handleRuntimeException(RuntimeException ex) {
        log.error(ex);
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
    }
}

请求前初始化绑定,给请求中添加请求参数

@Slf4j
@RestControllerAdvice
public class MyHandler {
     /**
     * 应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器
     *
     * @param binder
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        log.info("初始化数据绑定器");
        log.info(binder.getFieldDefaultPrefix());
        log.info(binder.getFieldMarkerPrefix());
    }

    /**
     * 把值绑定到Model中,使全局@RequestMapping可以获取到该值
     * @param model
     */
    @ModelAttribute
    public void addAttributes(Model model) {
        log.info("添加name参数");
        model.addAttribute("name", "hyl");
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值