SpringBoot封装通用异常

1.添加依赖

     <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-webmvc</artifactId>
    	  <version>5.0..RELEASE</version>
        </dependency>

  

2.自定义异常类

/**
 *自定义异常类
 */
public class CommonException extends  RuntimeException {

    private ExceptionEnum exceptionEunm;

    public CommonException(ExceptionEnum exceptionEunm) {
        this.exceptionEunm = exceptionEunm;
    }

    public ExceptionEnum getExceptionEunm() {
        return exceptionEunm;
    }

    public void setExceptionEunm(ExceptionEnum exceptionEunm) {
        this.exceptionEunm = exceptionEunm;
    }
}

  

3.自定义异常类型的枚举类

**
 * 自定义异常类型的枚举类
 */
public enum ExceptionEnum {


    PRICE_CANNOT_NULL(400,"价格不能为空"),
    ;
    private final Integer code;
    private final String  msg;


    ExceptionEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

  

4.自定义异常返回数据

/**
 * 自定义异常返回数据
 */
public class ExceptionResult {

    private  Integer status;
    private  String message;
    private Long timestamp;

    public  ExceptionResult(ExceptionEnum exceptionEnum){
        this.status= exceptionEnum.getCode();
        this.message=exceptionEnum.getMsg();
        this.timestamp =    System.currentTimeMillis();
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Long timestamp) {
        this.timestamp = timestamp;
    }

    @Override
    public String toString() {
        return "ExceptionResult{" +
                "status=" + status +
                ", message='" + message + '\'' +
                ", timestamp=" + timestamp +
                '}';
    }
}

  

5.通用异常通知

**
 * 通用异常通知
 * @ControllerAdvice:默认会自动拦截所有的Controller
 */
@ControllerAdvice
public class CommonExceptionHandler {


    @ExceptionHandler(CommonException.class)//拦截指定抛出的自定义CommonException异常
    public ResponseEntity<ExceptionResult> handlerException(CommonException e){

        return ResponseEntity.status(e.getExceptionEunm().getCode())
                .body(new ExceptionResult(e.getExceptionEunm()));
    }

}

  

6.实体类

public class Item {
    private  Integer id;
    private  String name;
    private Long  price;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getPrice() {
        return price;
    }

    public void setPrice(Long price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Item{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

  

7.写一个ItemController类测试

@RestController
@RequestMapping("/item")
public class ItemController {

    @Autowired
    private ItemService itemService;

    @PostMapping()
    public ResponseEntity<Item> saveItem(Item item){
        if (item.getPrice() == null){
            throw  new CommonException(ExceptionEnum.PRICE_CANNOT_NULL);
        }
        Item item1 = itemService.saveItem(item);
        return  ResponseEntity.status(HttpStatus.CREATED).body(item1);

    }

}

  

8.测试结果

成功返回

 

 

自定义异常返回

 

posted @ 2020-05-15 20:50  Amy清风  阅读(633)  评论(0编辑  收藏  举报