1.本文使用 @ControllerAdvice
@ExceptionHandler
进行全局的 Controller
层异常处理。 不用在 Controller
层进行 try-catch
!
package com.example.demo.exception.handler;
import com.example.demo.exception.BusinessException;
import com.example.demo.exception.code.BaseResponseCode;
import com.example.demo.util.DataResult;
import jdk.jfr.events.ExceptionThrownEvent;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
/**
* @ClassName RestExceptionHandler
* @Description 全局异常拦截
* @Author LiuY
* @Date 2020/12/5 17:38
*/
@Slf4j
@RestControllerAdvice
public class RestExceptionHandler {
@ExceptionHandler(Exception.class)
public DataResult handleException(Exception e){
return DataResult.getResult(BaseResponseCode.SYSTEM_ERROR);
}
/**
* 被除数0 异常
* @param e
* @return
*/
@ExceptionHandler(ArithmeticException.class)
public DataResult arithmeticException(ArithmeticException e){
return DataResult.getResult(BaseResponseCode.BY_ZERO_ERROR);
}
}
2.DataResult这是前面的数据封装
package com.example.demo.util;
import com.example.demo.exception.code.BaseResponseCode;
import com.example.demo.exception.code.ResponseCodeInterface;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @ClassName DataResult
* @Description TODO
* @Author LiuY
* @Date 2020/12/5 16:45
*/
@Data
public class DataResult<T> {
@ApiModelProperty("响应状态码")
private int code;
@ApiModelProperty("响应提示")
private String msg;
@ApiModelProperty("响应数据")
private T data;
public DataResult(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public DataResult(int code, String msg) {
this.code = code;
this.msg = msg;
}
public DataResult(ResponseCodeInterface responseCodeinterface){
this.code=responseCodeinterface.getCode();
this.msg=responseCodeinterface.getMsg();
this.data=null;
}
public DataResult(ResponseCodeInterface responseCodeinterface,T data){
this.code=responseCodeinterface.getCode();
this.msg=responseCodeinterface.getMsg();
this.data=data;
}
/**
* 操作成功,data为null
*/
public DataResult(){
this.code= BaseResponseCode.SUCCESS.getCode();
this.msg=BaseResponseCode.SUCCESS.getMsg();
this.data=null;
}
/**
* 请求成功,返回data
* @param data
*/
public DataResult(T data){
this.code=BaseResponseCode.SUCCESS.getCode();
this.msg=BaseResponseCode.SUCCESS.getMsg();
this.data=data;
}
/**
* 自定义返回,无需data
* @param code 响应状态码
* @param msg 响应提示语
* @return
*/
public static DataResult getResult(int code, String msg){
return new DataResult(code,msg);
}
/**
* 自定义data返回
* @param code 响应状态码
* @param msg 响应提示语
* @param data 响应数据
* @param <T>
* @return DataResult
*/
public static <T> DataResult getResult(int code, String msg, T data){
return new DataResult(code,msg,data);
}
/**
* 自定义返回,一般返回异常时调用,data为null
* @param baseResponseCode
* @return
*/
public static DataResult getResult(BaseResponseCode baseResponseCode){
return new DataResult(baseResponseCode);
}
/**
* 自定义返回,一般返回异常时调用
* @param baseResponseCode
* @param data
* @param <T>
* @return
*/
public static <T> DataResult getResult(BaseResponseCode baseResponseCode,T data){
return new DataResult(baseResponseCode,data);
}
/**
* 请求成功时调用,data为null
* @return
*/
public static DataResult success(){
return new DataResult();
}
/**
* 请求成功,需要返回data
* @param data
* @param <T>
* @return
*/
public static <T> DataResult success(T data){
return new DataResult(data);
}
}
3.Controller
package com.example.demo.controller;
import com.example.demo.entity.SysUser;
import com.example.demo.service.UserService;
import com.example.demo.util.DataResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @ClassName UserController
* @Description TODO
* @Author LiuY
* @Date 2020/12/6 17:04
*/
@RestController
@RequestMapping("/api/user")
@Api(tags = "用户模块")
public class UserController {
@Autowired
UserService userService;
@GetMapping("/login")
@ApiOperation("用户登录接口")
public DataResult<String> login(){
int i=1/0;
return DataResult.success(userService.login());
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)