SpringBoot的默认异常处理映射为“/error”。BasicErrorController已经默认实现了“text/html”的处理,如果想返回自定义JSON格式信息,则实现“ErrorController ”接口,增加一个produces 为“application/json”的方法即可,如:
@RestController
public class ExceptionController implements ErrorController {
@Autowired
private ErrorAttributes errorAttributes;
/**
* 默认错误
*/
private static final String path_default = "/error";
@Override
public String getErrorPath() {
return path_default;
}
/**
* JSON格式错误信息
*/
@RequestMapping(value = path_default, produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseMessage error(HttpServletRequest request) {
RequestAttributes requestAttributes = new ServletRequestAttributes(request);
Map<String, Object> body = this.errorAttributes.getErrorAttributes(requestAttributes, true);
return ResponseMessage.fail("服务器端异常!", body);
}
}
ResponseMessage 为自定义的实体类,用于向前端返回统一格式信息,结构如:
public class ResponseMessage {
/**
* 是否成功
*/
private boolean success;
/**
* 返回文字
*/
private String msg;
/**
* 返回数据
*/
private Object data;
public ResponseMessage() {
}
public ResponseMessage(boolean success, String msg, Object data) {
this.success = success;
this.msg = msg;
this.data = data;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static ResponseMessage success(){
return new ResponseMessage(true, null, null);
}
/**
* 成功返回方法
* @param data 返回数据
*/
public static ResponseMessage success(Object data){
return new ResponseMessage(true, null, data);
}
/**
* 失败返回方法--默认
*/
public static ResponseMessage fail(){
return new ResponseMessage(false, null, null);
}
/**
* 失败返回方法
* @param message 文字信息
*/
public static ResponseMessage fail(String message){
return new ResponseMessage(false, message, null);
}
/**
* 失败返回方法
* @param message 文字信息
* @param data 数据
*/
public static ResponseMessage fail(String message, Object data){
return new ResponseMessage(false, message, data);
}
}
开发者可以根据实际业务进行扩展次实体类,如增加时间戳、错误码等信息