>Java >java지도 시간 >Spring Boot 통합 예외 처리 예제 코드에 대한 자세한 설명

Spring Boot 통합 예외 처리 예제 코드에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-09 10:39:331867검색

웹 애플리케이션을 개발할 때 요청 처리 중에 오류가 발생하는 것은 매우 흔한 일입니다. 이때 통합 예외 처리가 필요합니다. 이 기사에서는 Spring Boot가 통합 예외 처리를 구현하는 방법에 대한 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 함께 살펴보겠습니다.

Spring Boot에는 기본적으로 오류 매핑이 포함되어 있지만 이 오류 페이지는 사용자에게 그다지 친숙하지 않습니다.

통합 예외 처리

각 컨트롤러에서 하나씩 정의하는 대신 @ControllerAdvice를 사용하여 통합 예외 처리를 위한 클래스를 정의합니다.

@ExceptionHandler는 함수에 대한 함수 유형을 정의하는 데 사용되며 마지막으로 Exception 객체와 요청 URL을 URL에 매핑합니다.

@ControllerAdvice
class ExceptionTranslator {
 public static final String DEFAULT_ERROR_VIEW = "error";
 @ExceptionHandler(value = Exception.class)
 public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
  ModelAndView mav = new ModelAndView();
  mav.addObject("exception", e);
  mav.addObject("url", req.getRequestURL());
  mav.setViewName(DEFAULT_ERROR_VIEW);
  return mav;
 }
}

error.html 페이지 표시 구현

template 디렉토리에 error.html을 생성합니다.

예:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
 <meta charset="UTF-8" />
 <title>统一异常处理</title>
</head> 
<body> 
 <h1>Error Handler</h1>
 <p th:text="${url}"></p>
 <p th:text="${exception.message}"></p>
</body> 
</html>

Json 형식을 사용하여 반환

추가만 하면 됩니다. @ ExceptionHandler 뒤에 @ResponseBody를 추가하면 처리 함수 반환 내용을 JSON 형식

으로 변환하여 다음과 같은 JSON 반환 객체를 생성할 수 있습니다.

public class ErrorDTO implements Serializable {
 private static final long serialVersionUID = 1L;
 private final String message;
 private final String description;
 private List<FieldErrorDTO> fieldErrors;
 //getter和setter省略
}

지정된 Exception에 대해 예외 처리를 추가할 수 있습니다

@ExceptionHandler(ConcurrencyFailureException.class)
 @ResponseStatus(HttpStatus.CONFLICT)
 @ResponseBody
 public ErrorDTO processConcurencyError(ConcurrencyFailureException ex) {
  return new ErrorDTO(ErrorConstants.ERR_CONCURRENCY_FAILURE);
 }

ErrorConstants.ERR_CONCURRENCY_FAILURE는 정의된 예외 메시지입니다.

요약

위 내용은 Spring Boot 통합 예외 처리 예제 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.