spring boot在请求一个不存在的接口时会返回一个错误页面,而有些情况下我希望返回一个json而json中标识错误。
这里使用spring提供的@ExceptionHandler来处理
首先在yml中设置没有绑定的url直接抛出错误
spring:
mvc:
throw-exception-if-no-handler-found: true
添加错误处理类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import com.zy.framework.constant.Constant;
import com.zy.framework.constant.JsonResponse;
import springfox.documentation.annotations.ApiIgnore;
/**
* <p>
* Title: 倬元信息
* </p>
* <p>
* Copyright: Copyright (c) 2017
* </p>
* <p>
* Version:zhuoyuan V1.0
* </p>
*/
@RestControllerAdvice
@ApiIgnore
public class AllExceptionHandler {
static Logger logger = LoggerFactory.getLogger(AllExceptionHandler.class);
@ExceptionHandler(value = Exception.class)
public JsonResponse<?> defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
logger.error("", e);
JsonResponse<?> r = new JsonResponse<>();
r.setMessage(e.getMessage());
if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
r.setStatus(404);
} else {
r.setStatus(500);
}
r.setData(null);
return r;
}
}
JsonResponse是自定义的返回对象
public class JsonResponse<T> {
private int status;
private T data;
private String message;
// 省略 getter setter
}
这时候访问一个不存在的url会返回如下