2012-12-13 4 views
4

예기치 않은 오류에 대해 전역 예외 처리기를 만들 수 있습니까?글로벌 사용자 지정 예외 처리기를 다시 준비

public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...} 

나는 이런 식으로 뭔가를 원하는 : 그것은 다음과 같은 가능한 모든 수업을하는 것은 불가능하기 때문에 는

public class ExceptionHandler implements ExceptionMapper<Exception> 
+0

이 아직 존재하는 기능이 아니라고 충격 ... https://issues.jboss.org/browse/RESTEASY-891 –

답변

3

당신은 아마 다음 작업을 수행 할 수 :

@Provider 
public class GlobalExceptionHandler implements ExceptionMapper<Exception> { 
    public Response toResponse(Exception exception) { 
     return Response.status(Status.INTERNAL_SERVER_ERROR) 
      .entity("An error occured").type(MediaType.TEXT_PLAIN) 
      .build(); 
    } 
} 

내가 RESTEasy가 3.0.6.Final에 그것을 테스트 만하고 보인다을 일하다. 500 Internal Server Error 상태 코드가 항상 적절한 것은 아닐 수도 있습니다.

+2

이 예외 핸들러는 NotFoundException 핸들러와 많은 같은 모든 기본 RESTEasy가 예외 핸들러 (오버라이드 (override) 더). 그것은 정말로 편리하지 않습니다. –

0

을 만드는 쉬운 방법이없는 것 같다. ExceptionMapper를 올바르게 반환하는 ResteasyProviderFactory를 수정해야합니다. 클래스 ResteasyProviderFactory에서 빌드를 직접 사용이 때문에 그러나 나는 몇 가지 클래스를 변경해야

8

허용되는 대답이 모든 예외를 포착 할지라도 Resteasy의 internal exception handling을 방해하는 등 많은 다른 문제가 발생할 수 있습니다.

따라서이 방법을 사용하면 중요한 각 메서드에 대한 사용자 지정 예외 매핑을 작성해야합니다.

특히이 방법은 CORS 처리를 손상시킬 수 있으므로 CORS 응답을 허용하는 경우 CORS 사용자 정의 예외 매퍼를 만들어야합니다.

@Provider 
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> { 

    @Override 
    public Response toResponse(DefaultOptionsMethodException e) { 
     return e.getResponse(); 
    } 
} 
관련 문제