leyou_01_自定义异常处理器

1.自定义异常处理器,当程序发生异常时可以我们可以自己定义返回的,状态码和状态信息

2.当异常发生时调用我们的自定义异常

@RestController
@RequestMapping("item")
public class ItemController {
    @Autowired
    private ItemService itemService;

    @PostMapping
    public ResponseEntity<Item> saveItem(Item item) {
        //检验价格是否为空
        if(item.getPrice()==null){
            throw new LyException(ExceptionEnum.PRICE_CANNOT_BE_NULL);//自定义异常LyException
           // return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
        }
         item = itemService.saveItem(item);
        return ResponseEntity.status(HttpStatus.CREATED).body(item);
    }
}

 

说明:throw new LyException(ExceptionEnum.PRICE_CANNOT_BE_NULL);//自定义异常LyException

LyException()自定义异常 需要传入一个ExceptionEnum对象包含状态码,和错误信息

防止状态码和错误形象的误传,可以以枚举的形式写好

ExceptionEnum.class

@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {

    PRICE_CANNOT_BE_NULL(400, "价格不能为空!"),
    ;
    private int code;
    private String msg;
}

 

 

SpringMvc拦截到异常

/**
 * 通用异常处理器
 */
@ControllerAdvice//默认拦截所有
public class CommonExceptionHandle {
    //方法的返回值就是返回页面的东西
    //捕获的异常
    @ExceptionHandler(LyException.class)
    public ResponseEntity<ExceptionResult> handleException(LyException e){
        ExceptionEnum em = e.getExceptionEnum();
        return ResponseEntity.status(em.getCode()).body(new ExceptionResult(e.getExceptionEnum()));

    }
}

 

 

分装一个异常返回的结果集

/**
 * 封装一个异常处理信息的返回结果集
 */
@Data
public class ExceptionResult {
    private int status;
    private String message;
    private Long timestamp;

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/asndxj/p/11536453.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值