参考文章:
http://www.bysocket.com/?p=1627
http://www.bysocket.com/?p=1692
代码:
https://github.com/viakiba/springboot_learn/tree/master/springbootrestful
https://github.com/viakiba/springboot_learn/tree/master/springbootjsoncode
根据参考的文章做几点补充:
CityErrorInfoEnum是一个枚举类型,如图:
此时,根据类名调用PARAMS_NO_COMPLETE或者_CITY_EXIT_就可以调用构造函数实例化对象:
接口定义:ErrorInfoInterface.java继承此接口的有两个CityErrorInfoEnum.java
GlobalErrorInfoEnum.java,city与全局 错误码 定义。
GlobalErrorInfoException.java定义异常。
对于:GlobalErrorInfoHandler.java
@RestControllerAdvice
public class GlobalErrorInfoHandler {
@ExceptionHandler(value = GlobalErrorInfoException.class)
public ResultBody errorHandlerOverJson(HttpServletRequest request,
GlobalErrorInfoException exception) {
ErrorInfoInterface errorInfo = exception.getErrorInfo();
ResultBody result = new ResultBody(errorInfo);
return result;
}
}
@RestControllerAdvice:异常捕获所有控制器跑出的GlobalErrorInfoException异常。内部有几个参数:
指定此控制器增强器增强的位置。默认是所有RestController.
此注解表示这个类适用于控制器增强,其内部有如下三个注解看例子:
@ControllerAdvice
public class ControllerAdviceTest {
@ModelAttribute
public User newUser() {
System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前把返回值放入Model");
return new User();
}
@InitBinder
public void initBinder(WebDataBinder binder) {
System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器");
}
@ExceptionHandler(UnauthenticatedException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String processUnauthenticatedException(NativeWebRequest request, UnauthenticatedException e) {
System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出UnauthenticatedException异常时执行");
return "viewName"; //返回一个逻辑视图名
}
}
ExceptionHandler注解的方法处理后,会返回给那个controller。
这样就完成参数码的统一。