springboot异常处理的一点总结

目录

一、效果

二、实现

1、自定义一个异常MyException

2、实现类调用

3、Controller

4、统一异常捕获

5、注意事项

一、效果

想实现的场景是, 

指定的异常直接抛到前端, 

捕获的异常后log.error(), 前端模糊返回"操作异常"

二、实现

1、自定义一个异常MyException

public class MyException extends RuntimeException {

    private static final long serialVersionUID = -1004916162498956491L;

    public MyException(String msg) {
        super(msg);
    }

}

2、实现类调用

@Override
    public int add(Demo demo) {
        if (null == demo.getName()) {
            throw new MyException("名称为空!");
        }
        return demoMapper.add(demo);
    }

3、Controller

    @PostMapping(value = "/add")
    public String add(@RequestBody Demo demo) {
        try {
            demoService.add(demo);
        } catch (MyException e) {
            return Resule.fail(e.getMsg());
        } catch (Exception e) 
            log.error("异常:{}",e)
            return Resule.fail();
        }
        return Resule.success();
    }

4、统一异常捕获

package com.xx.xx.manage.exception;



/**
 * @author libusi
 */
@Slf4j
@RestControllerAdvice
public class ApplicationExceptionHandler {

    protected static final Logger logger = LoggerFactory.getLogger(ApplicationExceptionHandler.class);


    @Autowired
    public ApplicationExceptionHandler(LogSaveUtil logSaveUtil) {
        this.logSaveUtil = logSaveUtil;
    }


    /**
     * 异常详细信息
     *
     * @return BaseResponse
     */
    @ExceptionHandler(MyException.class)
    public String msgException(Throwable t) {
        ...
        return Resule.fail();
    }

}

5、注意事项

自定义异常捕获不到,  那是因为controller没有catch MyException,  或者全局捕获异常的问题

一般情况下, 不要把未知异常的错误信息抛到前端,  要模糊处理返回

有用请点赞,养成良好习惯!

疑问、交流、鼓励请留言!


猜你喜欢

转载自blog.csdn.net/libusi001/article/details/127355768
今日推荐