>Java >java지도 시간 >Spring의 예외: 오류를 길들이는 방법

Spring의 예외: 오류를 길들이는 방법

DDD
DDD원래의
2024-11-03 09:41:30252검색

그래서 프로젝트에 Spring을 구현하면 머피의 법칙에 따라 예외가 나타납니다. 하지만 당황하지 마십시오. Spring에는 강력한 오류 처리 기능이 있습니다! 이러한 기능을 정확히 어떻게 사용할 수 있는지 알아보겠습니다.

체크된 예외와 체크되지 않은 예외: 왜 모든 것이 그렇게 혼란스럽나요?

Исключения в Spring: как приручить свои ошибки

Java는 예외를 선택형과 선택 취소형의 두 가지 유형으로 나눕니다. 확인된 예외에는 명시적인 처리가 필요합니다. 사람들이 통과하는 두 개의 횡단보도를 상상해 보세요. 한 건널목은 "엄격한 통제" 표시가 있는 엄격한 검사관이 지키고 있습니다. 여기에서는 모든 사람을 확인하며 통과 허가가 없으면 통과가 허용되지 않습니다. 이 전환은 확인된 예외와 유사합니다. 필수 처리가 필요하며, 그렇지 않으면 프로그램이 컴파일되지 않습니다.

반대로 두 번째 전환은 제어되지 않습니다. 사람들은 아무런 점검도 없이 자유롭고 빠르게 통과합니다. 이는 확인되지 않은 예외와 유사합니다. 이러한 예외는 처리가 필요하지 않으며 오류 확인 없이도 코드를 실행할 수 있습니다. 그러나 오류가 발생하면 "도로"에 예기치 않게 나타납니다.

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

@ExceptionHandler: 버그가 VIP 대우를 받는 경우

@ExceptionHandler는 지정된 메서드나 클래스에 대해서만 예외를 포착하고 처리하는 개인 "바운서"입니다. 특정 오류에 대해 VIP 처리를 하고 싶다면 메소드에 @ExceptionHandler 주석을 달고 즐겨보세요.

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

이제 ResourceNotFoundException이 발생할 때마다 사용자에게 무서운 오류 스택이 표시되는 대신 핸들러가 조용히 친숙한 메시지를 인쇄합니다.

@ControllerAdvice: 조언을 주어야 할 때

@ExceptionHandler가 특정 클래스에 대해서만 작동한다면 @ControllerAdvice가 대기열의 왕입니다. 이 주석은 모든 컨트롤러에 적용되므로 버그가 다시는 빠져나가지 않습니다!

Исключения в Spring: как приручить свои ошибки

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

이 코드를 사용하면 포착되지 않은 모든 오류를 포착하여 단일 메시지로 처리합니다. 이는 예외에 대한 "모든 것을 포함하는" 설정과 같습니다 - 편리하고 안전합니다.

@ResponseStatus: 예외를 더욱 구체적으로 표현하고 싶을 때

때때로 표준 HTTP 상태가 예외의 본질을 제대로 포착하지 못하는 경우가 있습니다. 그러나 @ResponseStatus를 사용하면 예외를 보다 구체적으로 표현할 수 있습니다.

Исключения в Spring: как приручить свои ошибки

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception ex) {
        return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

이제 ResourceNotFoundException이 발생하면 Spring은 사용자가 수동으로 수행하도록 강요하지 않고 자동으로 404 상태를 반환합니다. 드라마를 추가하는 좋은 방법이지 않나요?

@RestControllerAdvice: REST 애호가를 위한

@RestControllerAdvice는 @ControllerAdvice와 유사하지만 REST 컨트롤러에만 사용됩니다. 즉, HTML 페이지 대신 JSON을 반환하므로 API 생성을 위한 최선의 선택입니다. 진정한 REST 팬을 위한 지원!

Исключения в Spring: как приручить свои ошибки

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

이 접근 방식을 사용하면 사용자가 항상 JSON 형식으로 구조화된 응답을 받을 수 있으므로 API가 더욱 사용자 친화적이 됩니다.

맞춤 예외: 표준 예외로는 충분하지 않은 경우

Исключения в Spring: как приручить свои ошибки

어떤 시점에서는 표준 Exception과 RuntimeException이 상황의 비극을 완전히 표현하지 못한다는 사실을 깨닫게 됩니다. 글쎄, 당신만의 예외를 만들어보세요! 사용자 정의 예외는 약간의 개성을 추가하며 Spring은 여전히 ​​이를 존중하여 처리합니다.

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

이를 위한 핸들러를 생성하면 애플리케이션 사용자에게 무서운 줄이 아닌 명확한 메시지가 표시됩니다.

결론
Spring의 오류 처리는 약간의 예술입니다. 메소드 수준 처리에서 전역 처리, JSON 응답에서 사용자 정의 상태에 이르기까지 가능성은 정말 무궁무진합니다.

그러므로 @ExceptionHandler, @ControllerAdvice 및 @ResponseStatus를 잡고 예외를 오류 관리의 마스터 클래스로 전환하세요. Spring은 오류를 처리하고 사용자 앞에서 체면을 세울 수 있도록 도와줄 준비가 되어 있습니다

위 내용은 Spring의 예외: 오류를 길들이는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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