【springcloud专栏四】公共统一异常处理

目录

1、拦截器:

2、异常类属性 枚举:

3、异常类:

4、异常实体类:

5、调用:


demo下载:https://pan.baidu.com/s/1dRk-2VCkqkmVzIE4pSa3hA

该部分放在common微服务下:

1、拦截器:

@ControllerAdvice // 自动拦截所有controller
public class CommonExceptionHandler {
 
    // 返回类型的泛型是ExceptionResult
    @ExceptionHandler(LyException.class)
    public ResponseEntity<ExceptionResult> handleException(LyException e) {
        return ResponseEntity.status(e.getExceptionEnum().getCode()).body(new ExceptionResult(e.getExceptionEnum()));
    }
}

2、异常类属性 枚举:

@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {
 
    PRIVE_CANNOT_BE_NULL(HttpStatus.BAD_REQUEST.value(), "价格不能为空!"),
    CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "商品分类没查到!"),
    SPEC_GROUP_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "商品规格组没查到!"),
    BRAND_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "品牌不存在!"),
    BRAND_SAVE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), "新增品牌失败!"),
    UPLOAD_FILE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), "文件上传失败!"),
    INVALID_FILE_TYPE(HttpStatus.BAD_REQUEST.value(), "无效的文件类型!"),
    ;
    private int code;
    private String msg;
}

3、异常类:

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class LyException extends RuntimeException {
 
    private ExceptionEnum exceptionEnum;
}

4、异常实体类:

@Data
public class ExceptionResult {
    private Map<String, Object> data = Maps.newHashMap();
    private int status;
    private String message;
    private Long timestamp;
    private boolean success;
 
    public ExceptionResult() {
    }
 
    public ExceptionResult(ExceptionEnum e) {
        this.status = e.getCode();
        this.message = e.getMsg();
        this.timestamp = System.currentTimeMillis();
        this.success = false;
    }
 
    public ExceptionResult setResult(String key, Object obj){
        this.status = HttpStatus.OK.value();
        this.message = HttpStatus.OK.getReasonPhrase();
        this.timestamp = System.currentTimeMillis();
        this.success = true;
        data.put(key, obj);
        return this;
    }
}

5、调用:


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

6、ResponseEntity与@ResponseBody

@ResponseBody将JAVA对象序列化后放到响应体中

ResponseEntity:返回实体,包含状态码、body、

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值