@Valid 校验必填字段,当参数非法时,抛出异常,然后返回统一的错误信息
1. 全局异常处理 使用 @ControllerAdvice 实现全局异常处理,只需要定义类,添加该注解即可定义方式如下:
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
//@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public void methodArgumentNotValidException(HttpServletRequest request, HttpServletResponse response, MethodArgumentNotValidException e){
//封装需要返回的错误信息
Map<String, String> errorMsg = new HashMap<>(64);
for (FieldError fieldError : e.getBindingResult().getFieldErrors()) {
errorMsg.put(fieldError.getField(), fieldError.getDefaultMessage());
}
String jsonMsg = JSON.toJSONString(errorMsg);
Result<String> result = new Result<>(ResultStatusEnum.PARAMATER_ERROR, jsonMsg);
//错误返回
ResponseError.resultError(result, response);
}
}
2.错误返回类
/**
* 错误返回
*
* @param result 类型
* @param httpServletResponse servlet里的response
* @throws IOException 写入异常
*/
public static void resultError(Result<String> result, HttpServletResponse httpServletResponse) {
try {
//账号被其他用户登陆
httpServletResponse.setHeader("content-Type", "application/json");
httpServletResponse.setCharacterEncoding("UTF-8");
PrintWriter pw = httpServletResponse.getWriter();
pw.write(JSONObject.toJSONString(result));
} catch (IOException e) {
}
}
3.返回结果
{
“code”: 10004,
“content”: “{“data.cityCode”:“不能为null”}”,
“message”: “paramater_error”
}