开发接口时,对于数据的返回,我们会统一一个格式,方便调用接口的用户对数据进行处理,例如:
{
"data": [
{
"ctime": "2018-12-14 16:46:56",
"id": 1,
"lat": 39.12,
"lng": 117.2,
"utime": "2018-12-17 17:17:42",
}
],
"code": 0,
"msg": "OK"
}
调用人可以通过code来判断是否调用成功,并且通过msg查看结果信息。但是,当程序发生错误时,例如页面未找到404或者代码执行过程中出现错误异常没有进行捕获,在spring boot中返回了一个json格式的数据,如下:
{
"timestamp": 1545184996402,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/test"
}
这与我们定义的格式不一致。所以,这里就需要对改json的格式进行自定义。
第一步:
在spring boot的配置文件中添加下配置:
#页面未找到时抛出异常
spring.mvc.throw-exception-if-no-handler-found=true
第二步:
定义一个异常处理类
package com.ruixiude.cloud.wom;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author zgerbin
* @date 2018/12/18 14:11
* @description
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 全局异常
* @param request
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Map exceptionHandler(HttpServletRequest request, Exception e) {
logger.error("", e);
Map json = new HashMap();
json.put("msg", e.getMessage());
if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
json.put("code", 404);
} else {
json.put("code", 500);
}
json.put("path", request.getRequestURI());
return json;
}
}
这样,当我们调用接口出现错误时,就会返回如下格式的json:
{
"msg": "No handler found for GET /wom/api/test",
"code": 404,
"path": "/wom/api/test"
}