spring boot 在使用restful时肯定需要统一的json格式 例如:
{
"status": true,
"code": 200,
"message": null,
"data": [
{
"id": "101",
"name": "jack"
},
{
"id": "102",
"name": "jason"
}
]
}
在spring boot中其实也是返回了一个json格式的数据,如下:
{
"timestamp": 1492063521109,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/rest11/auth"
}
像401,403,404,405这些错误,我们也需要统一一下json格式,
这里有一点需要注意的是,404错误在DispatcherServlet跑出noHandlerFound异常之后,又交回给dispatcherServlet调用ErrorController中的/error请求
这种异常我们需要重写 AbstractErrorController
/**
* @ProjectName: cicada
* @Package: com.util.config.exception
* @ClassName: BasicErrorController
* @Description: 统一异常处理
* @Author: 孙志成
* @CreateDate: 2018/7/17 14:05
* @UpdateUser: 更新者
* @UpdateDate: 2018/7/17 14:05
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@Controller
@RequestMapping("/error")
public class BasicErrorController extends AbstractErrorController {
public BasicErrorController(ErrorAttributes errorAttributes) {
super(errorAttributes);
}
@Autowired
private ApplicationContext applicationContext;
@RequestMapping
@ResponseBody
public JsonResult error(HttpServletRequest request, HttpServletResponse response) {
JsonResult a =new JsonResult();
switch (response.getStatus()){
case 404:
a.fail(404,"访问链接不存在!");
return a;
case 401:
a.fail(401,"您没有访问权限!");
return a;
case 403:
a.fail(403," 拒绝访问!");
return a;
default:
a.fail(500,"服务器内部错误");
return a;
}
}
@Override
public String getErrorPath() {
return null;
}
}
然后springboot Application 类中 @EnableWebMvc注解要有 还有扫包一定要注意扫到这个BasicErrorController 不然累死你也不好使
最后我们讲讲其他的异常:例如405等
这些异常都可以通过
ExceptionHandler得到所以我们可以这样写
/**
* @ProjectName: cicada
* @Package: com.util.config.exception
* @ClassName: GlobalControllerExceptionHandler
* @Description: java类作用描述
* @Author: 孙志成
* @CreateDate: 2018/7/17 11:55
* @UpdateUser: 更新者
* @UpdateDate: 2018/7/17 11:55
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
@ControllerAdvice
public class GlobalControllerExceptionHandler {
/**
* 系统异常处理,比如:404,500
* @param req
* @param
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public JsonResult defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
JsonResult r = new JsonResult();
r.setMessage(e.getMessage());
if (e instanceof HttpRequestMethodNotSupportedException){
r.setCode(405);
r.setMessage(" 请求方式不正确!");
}else {
r.setCode(500);
}
r.setData(null);
return r;
}
}
真的是有点坑....网上的资料说的也不是不对,但是知其然不知其所以然是不对的。
我们可以结合网上的资料借鉴,但是也要自己跟代码看看内部是如何实现的这样我们才能更好的掌握