AllExceptionHandler.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.nuliji.tools.exception;
  2. import com.alibaba.fastjson.JSON;
  3. import com.nuliji.tools.Response;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.http.HttpStatus;
  7. import org.springframework.http.MediaType;
  8. import org.springframework.validation.BindingResult;
  9. import org.springframework.validation.ObjectError;
  10. import org.springframework.web.bind.MethodArgumentNotValidException;
  11. import org.springframework.web.bind.annotation.ControllerAdvice;
  12. import org.springframework.web.bind.annotation.ExceptionHandler;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. import org.springframework.web.bind.annotation.ResponseStatus;
  15. import org.springframework.web.servlet.HandlerExceptionResolver;
  16. import org.springframework.web.servlet.ModelAndView;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import java.io.IOException;
  20. import java.util.List;
  21. /**
  22. * Created by gaojie on 2017/5/11.
  23. */
  24. @ControllerAdvice
  25. public class AllExceptionHandler implements HandlerExceptionResolver {
  26. private static final Logger logger = LoggerFactory.getLogger(AllExceptionHandler.class);
  27. public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
  28. Exception ex) {
  29. ex.printStackTrace();
  30. logger.error(ex.toString());
  31. ModelAndView mv = new ModelAndView();
  32. /* 使用response返回 */
  33. response.setStatus(HttpStatus.OK.value()); //设置状态码
  34. response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentType
  35. response.setCharacterEncoding("UTF-8"); //避免乱码
  36. response.setHeader("Cache-Control", "no-cache, must-revalidate");
  37. try {
  38. response.getWriter().write(JSON.toJSONString( new Response(500, ex.getMessage(), null)));
  39. } catch (IOException e) {
  40. logger.error("与客户端通讯异常:"+ e.getMessage(), e);
  41. }
  42. return mv;
  43. }
  44. @ExceptionHandler({MethodArgumentNotValidException.class})
  45. @ResponseStatus(HttpStatus.OK)
  46. @ResponseBody
  47. public Object HandleValidationErrors(MethodArgumentNotValidException e){
  48. BindingResult result = e.getBindingResult();
  49. List<ObjectError> fieldErrors = result.getAllErrors();
  50. for(ObjectError fieldError : fieldErrors){
  51. logger.error("{}, error[{}], message: {}", fieldError.getObjectName(), JSON.toJSONString(fieldError.getArguments()), fieldError.getDefaultMessage());
  52. }
  53. ObjectError objectError = fieldErrors.get(0);
  54. return new Response(400, objectError.getDefaultMessage(), null);
  55. }
  56. }