lyshop学习笔记二-通用异常处理


title: 乐优商城学习笔记二
date: 2019-04-12 16:56:37
tags:
- 乐优商城
- java
- springboot
categories:
- 乐优商城


通用异常处理

1. 场景预设

新增商品类,接受以下两个参数:

price 价格
name 名称

对数据进行校验:

  • 价格不能为空

2.代码实现

实体类:

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;
    }
}

service类:

该demo为测试所用,所以并未从数据库中获取数据而是采用本地的数据的方式。

@Service
public class ItemSevice {
    public Item saveTtem(Item item){
        //商品新增
        int id = new Random().nextInt(100);
        item.setId(id);
        return item;
    }
}

web类:

该demo主要是对通用异常如何使用的理解,通过注入ItemService获取所需依赖。在saveItem方法中,对价格进行了判断,如果为空则抛出异常,我们主要学习的是对抛出的异常进行处理。

@RestController
@RequestMapping("item")
public class ItemController {
    @Autowired
    private ItemSevice itemSevice;

    @PostMapping
    public ResponseEntity<Item> saveItem(Item item){
        //校验价格
        if (item.getPrice() == null){
           // return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
            throw new LyException(ExceptionEnum.PRICE_CANNOT_BE_NULL);
        }
        return ResponseEntity.status(HttpStatus.CREATED).body(item);
    }
}

exception类:

LyException调用了自定义的枚举类型ExceptionEnum。

/*
*注解使用的是lombok的库,主要目的简化开发过程,省去写getter和setter方法以及构造函数
*/
@NoArgsConstructor//无参构造函数
@AllArgsConstructor//有参构造函数
@Getter//获得getter方法
public class LyException extends RuntimeException {
    private ExceptionEnum exceptionEnum;

/*    public ExceptionEnum getExceptionEnum() {
        return exceptionEnum;
    }*/

}

enums类:

定义的枚举常量一般为大写。

@NoArgsConstructor
@AllArgsConstructor
@Getter
public enum ExceptionEnum {
    PRICE_CANNOT_BE_NULL(400, "价格不能为空"),
    //PRICE_CANNOT_BE_NULL(400,"价格不能为空"),
    ;

    private int code;
    private String msg;

}

通用处理方法

  • @ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。
  • ResponseEntity继承了HttpEntity,是HttpEntity的子类且可以添加HttpStatus状态码(推测HttpEntity不能添加HttpStatus状态码)。被用于RestTemplate和Controller层方法
  • ResponseEntity是通用类型,因此可以使用任意类型作为响应体
@ControllerAdvice
public class CommonExceptionHandler {

    @ExceptionHandler(LyException.class)
    public ResponseEntity<ExceptionResult> handleException(LyException e){
       //ExceptionEnum em =e.getExceptionEnum();
        return ResponseEntity.status(e.getExceptionEnum().getCode())
                .body(new ExceptionResult(e.getExceptionEnum()));
    }
}

通用异常处理核心方法如上所示,返回ResponseEntity方法。.body(new ExceptionResult(e.getExceptionEnum()));获取异常结果。

3.运行结果

成功

7149586-e4a8e7ed9e06a860.png
image

失败

7149586-3e255c8eec70089b.png
image
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值