
参数校验失败统一返回给前端异常信息
参数校验如何使用参考:http://www.jiajiajia.club/blog/artical/yjw520/248
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.elasticsearch.entity.Result;
import org.springframework.core.annotation.Order;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* 全局统一异常处理
*/
@Order(-1000)
@Component
public class ParamValidExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse response, Object o, Exception e) {
StringBuilder sb = new StringBuilder();
//处理异常
if(e instanceof MyException) {
//自定义异常
resolverBussinessException(e, sb);
} else if (e instanceof BindException) {
//参数校验异常
resolverBindException(e, sb);
} else {
//其他异常
resolverOtherException(e, sb);
}
/**
* 返回前端json字符串
*/
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
try {
// Result 是你返回给前端的数据类型,自己定义
response.getWriter().write(JSON.toJSONString(Result.err(sb.toString())));
} catch (IOException ex) {
e.printStackTrace();
}
return new ModelAndView();
}
/*
* 处理业务层异常
*/
private void resolverBussinessException(Exception ex, StringBuilder sb) {
MyException myException = (MyException) ex;
sb.append(myException.getMessage());
}
/*
* 处理参数校验
*/
private void resolverBindException(Exception ex, StringBuilder sb) {
BindException be = (BindException) ex;
List<FieldError> errorList = be.getBindingResult().getFieldErrors();
for (FieldError error : errorList) {
sb.append(error.getObjectName());
sb.append("对象的");
sb.append(error.getField());
sb.append("字段");
sb.append(error.getDefaultMessage());
}
}
/*
* 处理其他异常
*/
private void resolverOtherException(Exception ex, StringBuilder sb) {
sb.append(ex.getMessage());
}
}