您的位置:首页 > 编程语言 > Java开发

spring boot统一处理结果(含异常)

2017-08-21 12:10 846 查看

1.定义返回结果模板

public class Result<T> {

/* 状态码 */
private String code;

/* 提示信息  */
private String msg;

/* 返回的数据 */
private T data;

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}

}


2.自定义异常

public class MyException extends RuntimeException{

private static final long serialVersionUID = 7112519404688544220L;

/* 状态码 */
private String code;

public MyException (String code,String msg){
super(msg);
this.code = code;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

}


3.统一异常处理

@ControllerAdvice
public class ExceptionHandle {

private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.clas
4000
s);

@ExceptionHandler(value=MyException.class)
@ResponseBody
public Result<Object> exceptionHandle(Exception e){
if(e instanceof MyException){
MyException mye = (MyException)e;
return ResultUtil.error(mye.getCode(), mye.getMessage());
}else{
logger.error("【系统异常】{}", e);
return ResultUtil.error("-1", "未知错误");
}
}

}


4.统一结果处理

@ControllerAdvice
public class ResultHandle implements ResponseBodyAdvice<Object> {

@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}

@SuppressWarnings("unchecked")
@Override
public Object beforeBodyWrite(Object object, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
if(object instanceof Result){
Result<Object> result = (Result<Object>) object;
if(!result.getCode().equals("0")){
return result;
}
}
return ResultUtil.success(object);
}
}


5.测试

util

public class ExceptionUtil {

public static void throwError(String code){
throw new MyException(code,PropertiesUtil.errRes.getString(code));
}

public static void throwError(String code,String message){
throw new MyException(code,message);
}

}


public class PropertiesUtil {

public static PropertyResourceBundle errRes = (PropertyResourceBundle) PropertyResourceBundle.getBundle("properties/error");

}


Controller层

@GetMapping("/girls/{id}")
public Girl girlById(@PathVariable("id")Integer id){
return girlService.girlById(id);
}


Service层

public Girl girlById(Integer id) {
Girl girl = girlRepository.findOne(id);
Integer age = girl.getAge();
if(age < 10){
ExceptionUtil.throwError("100");
}else if(age >=10 && age < 16){
ExceptionUtil.throwError("101");
}

return girl;
}


演示结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: