如果接口调用的时候发生错误,则会直接给前端返回一大堆看不懂的代码,那就很不友好啦!所以要利用java的错误处理机制对错误进行处理,返回给前端看的懂的文字。
一、编写错误类
//通过继承Exception类,设置方法,传入正确的错误提示
package *.*.*
/**
*
* @author fangjun
* @date 2018年6月26日
* @version 1.0
*/
public class EquimentNotFoundException extends Exception {
/**
* 查询不到环境监控设备错误类
*/
private static final long serialVersionUID = 1L;
public EquimentNotFoundException(String messages){
super(messages);
}
}
二、利用java错误处理,抛出错误
//如果用户等于空,抛出查找不到该设备的错
if(user==null) {
throw new EquimentNotFoundException ("查不到该设备");
}
三、包装返回结果,将正确的数据或错误返回给前端
public class ResponseEntity<T> {
//状态码,也可以设置
private int code;
//返回的说明内容
private String msg;
//返回的结果
private T result;
//返回结果是正确调用的方法
public static <T> ResponseEntity<T> success(T result) {
return new ResponseEntity<T>().setCode(HttpStatus.OK.value()).setMsg("success").setResult(result);
}
//返回结果错误调用的方法
public static <T> ResponseEntity<T> fail(Exception e) {
ResponseEntity<T> result;
//判断查找是否是自定义的错误类型
if(e instanceof EquipmentNotOnlineException||e instanceof UserInFoNotLookupException||e instanceof
){
result = new ResponseEntity<T>().setCode(HttpStatus.INTERNAL_SERVER_ERROR.value()).setMsg(e.getMessage());
}else{
/ /如果不是自定义的错误,统一返回服务内部错误,防止返回看不懂的错误提示
result = new ResponseEntity<T>().setCode(HttpStatus.INTERNAL_SERVER_ERROR.value()).setMsg("服务内部错误");
}
return result;
}
public int getCode() {
return code;
}
public ResponseEntity<T> setCode(int code) {
this.code = code;
return this;
}
public String getMsg() {
return msg;
}
public ResponseEntity<T> setMsg(String msg) {
this.msg = msg;
return this;
}
public T getResult() {
return result;
}
public ResponseEntity<T> setResult(T result) {
this.result = result;
return this;
}
}
四、controller层调用包装类返回结果
try {
//验证url请求头带来的token是否正确
String token = request.getHeader("token");
//如果错误抛出错误
//如果token为空
if(token==null) {
throw new NotloggedInException("用户未登录");
}else {
//调用工具类检查token是否正确和是否超时
UserInFo user=JwtUtils.decode(token,UserInFo.class);
if(user==null) {
throw new NotloggedInException("用户未登录");
}
}
//token检查通过开始实现接口功能
service.insertArchitecture(utils);
//利用包装工具返回结果给前端调用者
return ResponseEntity.success(true);
} catch (Exception e) {
//如果捕捉到错误,利用包装类返回给前端正确的错误信息
return ResponseEntity.fail(e);
}