一、統一數據返回模板
創建一個消息類Message.java,代碼如下
package com.ws.demo.vo;
import com.ws.demo.enumClass.CallType;
public class Message {
//調用結果類型
private CallType callType;
//消息
private String msg;
//數據
private Object data;
//狀態碼
private Integer status;
//異常鏈接
private String url;
/**
* 此處省略 get set toString
**/
public Message() {
}
/**
* 錯誤返回
* @param callType
* @param msg
*/
public Message(CallType callType, String msg, Integer status, String url) {
this.callType = callType;
this.msg = msg;
this.status = status;
this.url = url;
}
/**
* 成功返回
* @param callType
* @param msg
* @param data
*/
public Message(CallType callType, String msg, Object data, Integer status) {
this.callType = callType;
this.msg = msg;
this.data = data;
this.status = status;
}
/**
* 返回成功消息
* @param data 返回數據
* @return
*/
public static Message success(Object data){
return new Message(CallType.success,"操作成功!",data,0);
}
/**
* 返回失敗消息
* @param msg
* @return
*/
public static Message unsuccess(String msg,String url){
return new Message(CallType.error,msg,-1,url);
}
}
創建調用結果狀態枚舉類CallType.java,代碼如下
package com.ws.demo.enumClass;
public enum CallType {
success,
warn,
error;
}
來測試一下吧
@RestController
public class TestController {
@RequestMapping("testMessage")
public Message testMessage(){
//SocketMsg爲一個實體類
SocketMsg sm = null;
try {
sm = null;
sm = new SocketMsg();
sm.setFromUser("LFQ");
sm.setMsg("我來了!");
sm.setToUser("YXX");
sm.setType(1);
//此處模擬代碼出現異常
//int flag = 1 / 0;
} catch (Exception e) {
//失敗狀態下調用unsuccess方法
return Message.unsuccess(e.getMessage(),request.getRequestURI());
}
//成功狀態下調用success方法
return Message.success(sm);
}
}
效果如下:
二、全局異常處理
1、定義一個異常類HospitalException.java,繼承Exception
public class HospitalException extends Exception{
public HospitalException(String message) {
super(message);
}
}
2、創建自定義異常類型枚舉類ExceptionType.java
public enum ExceptionType {
SqlException("數據庫異常!"),
ServiceException("算法服務調用失敗!"),
NullException("未知異常!");
private String msg;
ExceptionType(String msg) {
this.msg = msg;
}
public String getMsg() {return msg;}
public void setMsg(String msg) {this.msg = msg;}
}
3、配置全局異常處理器,處理HospitalException
@Configuration
@ControllerAdvice
public class ExceptionController {
/**
* //異常處理器,處理HospitalException異常
* @param request
* @param e
* @return
*/
@ResponseBody
@ExceptionHandler(value = HospitalException.class)
public ResponseEntity<?> hanlerException(HttpServletRequest request, HospitalException e){
//返回自定義消息
Message error = Message.unsuccess(e.getMessage(),request.getRequestURI());
return new ResponseEntity<>(error, HttpStatus.OK);
}
}
4、來測試一下吧
@RestController
public class TestController {
@RequestMapping("testMessage")
public Message testMessage(HttpServletRequest request)throws HospitalException{
SocketMsg sm = null;
try {
sm = null;
sm = new SocketMsg();
sm.setFromUser("LFQ");
sm.setMsg("我來了!");
sm.setToUser("YXX");
sm.setType(1);
//模擬出現異常
int flag = 1 / 0;
} catch (Exception e) {
ExceptionType et = ExceptionType.NullException;
//這裏消息也可以是系統異常消息
throw new HospitalException(et.getMsg());
}
return Message.success(sm);
}
}
效果如下