복붙노트

[SPRING] 오류를 다시 서비스 계층의보기로 전달

SPRING

오류를 다시 서비스 계층의보기로 전달

편집 : 나는 봄 3의 @ExceptionHandler 주석을 살펴본 후 아래의 옵션 1과 결합하여 매우 깨끗한 솔루션으로 보입니다.

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers를 참조하십시오.

나는 또한 이것을 좋은 것으로 읽었습니다. http://blog.decaresystems.ie/index.php/2006/04/07/difficult-choices-in-handling-exceptions-in-enterprise-java-applications/

나는 Spring MVC 프레임 워크를 사용하여 개발하고 있지만 서비스 레이어에서 발생한 오류를 JSP로 전달하는 '좋은'방법을 찾기 위해 고심하고 있습니다.

기본적으로, 비즈니스 로직 ( "이 필드는 필수"이상)이 유효성 검사기에 있어야한다고 생각하지 않습니다. 특히 DB에 액세스해야하는 모든 논리가 있어야합니다. 그래서 내가하고있는 일은 서비스 계층에 더욱 복잡한 검증과 비즈니스 로직을 배치하는 것입니다.

예를 들어 사용자가 도서를 구입할 수있는 페이지가 있다고 가정 해 보겠습니다. 그들은 JSP에서 "Purchase"를 클릭하고 컨트롤러는 서비스를 호출하여 모든 일을 처리합니다 ... 서비스가 자금이 충분하지 않다고 판단하면 어떻게됩니까?이 메시지를 JSP로 다시 가져 오려면 어떻게해야합니까? "부족한 금액"메시지가 사용자에게 표시 될 수 있습니까? 나는 두 가지 방법을 고려해 봤는데 어떤 것이 맞는지 모르겠습니다 ...

옵션 1 : 예외

내가 생각한 첫 번째 방법은 서비스 계층에서 예외를 발생시키고 컨트롤러에서 트랩하고 BindingResult에 메시지를 추가하는 것입니다.

서비스:

public void pay(Book book) throws InsufficientFundsException {
    // Some logic goes here, which ends up throwing the above exception
}

제어 장치:

public ModelAndView(@ModelAttribute("book") Book book, BindingResult errors) {
    try {
        pay(book);
    } catch (InsufficientFundsException ex) {
        errors.reject("insufficient.funds");
    }
    return new ModelAndView(blahblahblah);
}

옵션 2 : BindingResult를 서비스 계층에 전달

두 번째 방법은 BindingResult 개체를 서비스 계층에 전달하고 그에 대한 추가 오류를 발생시키는 것입니다.

서비스:

public void pay(Book book, BindingResult errors) {
    // User has insufficient funds, so...
    errors.reject("insufficient.funds);
}

나는이 두 가지 방법으로 문제를 볼 수있다. 옵션 1은 어색함을 느낍니다. 예외를 잡아야 할뿐만 아니라 바인딩 결과에 오류를 추가해야하므로 동일한 작업을 두 번하고있는 것처럼 느낍니다. 그리고 옵션 2는 서비스 계층을 컨트롤러에 너무 단단히 묶는 것처럼 보입니다.

마지막으로, 옵션 1과 함께 사용할 수있는 SimpleMappingExceptionResolver가 있음을 알고 있지만 적절한 방법이 아닌지 잘 모르겠습니다. 위의 예에서는 사용자가 양식 위에 빨간색 오류가있는 원래 양식으로 돌아가고 완전히 다른 페이지로 리디렉션되지 않도록하려는 인수에 대해 말할 수 있습니다. SimpleMappingExceptionResolver는 특정 예외가 발생할 때 사용자를 표준 오류 페이지로 리디렉션하려는 경우 유용합니다 (이는 내가 수행 방법을 알고 싶지 않습니다).

해결법

  1. ==============================

    1.자바는 예외를 사용하여 자연스럽게 이런 종류의 것을 처리한다. 결국 일반적으로 논리를 단순화하고 오류가 있음을 확인하는 것을 잊어 실수를 저지를 가능성을 줄입니다. 또한 코드의 주요 흐름에서 오류 논리를 이동할 수 있습니다.

    자바는 예외를 사용하여 자연스럽게 이런 종류의 것을 처리한다. 결국 일반적으로 논리를 단순화하고 오류가 있음을 확인하는 것을 잊어 실수를 저지를 가능성을 줄입니다. 또한 코드의 주요 흐름에서 오류 논리를 이동할 수 있습니다.

    내가 제시 한 사례가 오류를 처리하기 위해 예외 처리를 사용하는 다른 사례와 다른 이유를 알 수 없습니다.

  2. from https://stackoverflow.com/questions/3224749/passing-errors-back-to-the-view-from-the-service-layer by cc-by-sa and MIT license