在BaseController中寫
@ExceptionHandler(value = { MethodArgumentNotValidException.class,BindException.class })
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
public @ResponseBody CallResult<?> validExceptionHandler(Exception validException) {
CallResult<?> result = new CallResult<>();
if (validException instanceof MethodArgumentNotValidException) {
convertError(((MethodArgumentNotValidException) validException).getBindingResult(), result);
} else if (validException instanceof BindException) {
convertError(((BindException) validException).getBindingResult(), result);
}
return result;
}
/**
* 將errors對(duì)象轉(zhuǎn)換為CallResult輸出,驗(yàn)證錯(cuò)誤轉(zhuǎn)為map
*
* @param error 錯(cuò)誤對(duì)象
* @param result
* @see org.springframework.validation.Errors
* @return
*/
@SuppressWarnings({ "rawtypes","unchecked" })
public static void convertError(Errors error, CallResult result) {
if (error.hasErrors()) {
result.setStatus(ResultEnum.PARAM_ERROR.getStatus());
Map<String,String> errMap = new HashMap<String,String>();
String errorMsg = "";
if (error.hasGlobalErrors()) {
String globalMsg = "";
for (ObjectError ferr : error.getGlobalErrors()) {
globalMsg = globalMsg + ferr.getDefaultMessage() + ";";
}
errorMsg += globalMsg;
errMap.put("_global_msg", globalMsg);
}
if (error.hasFieldErrors()) {
for (FieldError ferr : error.getFieldErrors()) {
errMap.put(ferr.getField(), ferr.getDefaultMessage());
errorMsg = errorMsg + ferr.getDefaultMessage() + ";";
}
}
result.setMessage(errorMsg);
result.setData(errMap);
}
}
CallResult
public class CallResult<T> implements Serializable {
private static final long serialVersionUID = 1L;
private int status = 200; // 狀態(tài)碼
private String message; // 結(jié)果描述
private T data; // 返回?cái)?shù)據(jù)
public CallResult() {
this(ResultEnum.SUCCESS);
}
/**
* 構(gòu)造函數(shù),使用默認(rèn)結(jié)果枚舉ResultEnum設(shè)置status和message
*
* @param result ResultEnum
*/
public CallResult(ResultEnum result) {
setResult(result.getStatus(), result.getMessage());
}
public CallResult(int status) {
this.status = status;
}
public CallResult(int status, String message) {
setResult(status, message);
}
/**
* 構(gòu)造函數(shù)
*
* @param status
* @param message
* @param data
*/
public CallResult(int status, String message, T data) {
this.status = status;
this.message = message;
this.data = data;
}
public int getStatus() {
return status;
}
public void setStatus(int code) {
this.status = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public void setResult(ResultEnum err) {
this.status = err.getStatus();
this.message = err.getMessage();
}
public void setResult(int code, String msg) {
this.status = code;
this.message = msg;
}
/**
* 結(jié)果是否成功,即等于ErrorEnum.SUCCESS.
*
* @return boolean
*/
public boolean success() {
return status == ResultEnum.SUCCESS.getStatus();
}
public static <T> CallResult<T> error(String message) {
CallResult<T> result = new CallResult<>(ResultEnum.SERVER_ERROR.getStatus(), message);
return result;
}
public static <T> CallResult<T> paramError(String message) {
CallResult<T> result = new CallResult<>(ResultEnum.PARAM_ERROR.getStatus(), message);
return result;
}
/**
* 默認(rèn)的執(zhí)行結(jié)果枚舉. <br>
* 200=執(zhí)行成功 <br>
* 400=提交的數(shù)據(jù)錯(cuò)誤倒信,即參數(shù)錯(cuò)誤 <br>
* 401=身份驗(yàn)證失敗,如登錄失敗等 <br>
* 403=無(wú)權(quán)限訪問 <br>
* 500=執(zhí)行錯(cuò)誤,通常是程序執(zhí)行拋出異常了
*/
public enum ResultEnum {
SUCCESS(200),
PARAM_ERROR(400),
NO_AUTH(401),
FORBIDDEN(403),
SERVER_ERROR(500);
private int status;
private final static String[] initMsgs = { "執(zhí)行成功","提交的數(shù)據(jù)錯(cuò)誤","身份驗(yàn)證失敗","無(wú)權(quán)限訪問","執(zhí)行錯(cuò)誤" };
private ResultEnum(int status) {
this.status = status;
}
public int getStatus() {
return status;
}
/**
* 返回結(jié)果描述.
*
* @return 結(jié)果描述String
*/
public String getMessage() {
switch (status) {
case 200:
return initMsgs[0];
case 400:
return initMsgs[1];
case 401:
return initMsgs[2];
case 403:
return initMsgs[3];
case 500:
return initMsgs[4];
default:
break;
}
return null;
}
}
@Override
public String toString() {
return MessageFormat.format("status={0},message={1},data={2}", status, message,
(data == null ? "" : data.toString()));
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者