1

저지 기반 웹 서비스는 서비스 메소드에 의해 발생 된 예외를 원하는 HTTP 리턴 코드 (here)와 연관시킬 수 있다는 것을 알고 있습니다. 이제는 클라이언트가 서비스 메소드에 의해 생성 된 것과 동일한 예외를 생성 할 수있는 기회가 있습니까? 서버 측에서 MySpecificException이 발생하면 HTTP 응답에 이러한 정보 (예 : 예외 클래스의 FQN)를 저장하는 방법이 있는지 확인합니다 (자동으로 응답을 빌드하는 메서드를 사용하지 않으려 고합니다. POJO 또는 void를 반환하기를 원합니다. 클라이언트가 동일한 예외를 다시 throw 할 수 있도록 POJO 또는 void를 반환해야합니다.저지 : 클라이언트가 동일한 서버 예외를 throw하도록 만들기

+0

[복제 됨] (http://stackoverflow.com/questions/15185299/jax-rs-jersey-exceptionmappers-user-defined-exception) – gks

+0

나는 그것이 그 문제의 중복이라고 생각하지 않습니다. 여기에서는 클라이언트가 404가 아닌 UserNotFoundException을 생성했음을 클라이언트가 알 수 있기를 원합니다. 인증 된 사용자가 아닌 권한이 충분하지 않은 사용자에게 HTTP (HTTP) 코드를 생성하는 몇 가지 이유가 있기 때문에 필요합니다. 나는 오류 메시지에 의존하여 클라이언트 측의 세부 사항을 이해하고 싶지 않습니다. – zakmck

답변

1

REST는 예외를 응답으로 지정하지 않으므로이를 수행하기위한 직접적인 방법은 없습니다 (RPC가 아닙니다).

그러나 자신 만의 규칙을 소개 할 수 있습니다.

public class ForbiddenException extends WebApplicationException { 

    public ForbiddenException(String code, String readableMessage) { 
     super(Response.status(Status.FORBIDDEN).entity(new ForbiddenEntity(code, readableMessage)).build()); 
    } 

} 

(당신은 아마 ExceptionMapper에 응답하는 대신 예외 자체를 구성해야하지만,이 데모 목적을 위해 단지이다) 예를 들어 :

공급자 측면에서 당신은 ForbiddenException을 정의 할 수 있습니다.

그리고 소비자 측

- ClientFilter : 이것은 한 서버가 규칙 및 클라이언트 준수로 작동

public class ForbiddenExceptionClientFilter extends ClientFilter { 

    @Override 
    public ClientResponse handle(ClientRequest cr) throws ClientHandlerException { 
     ClientResponse response = getNext().handle(cr); 

     if (response.getStatus() == Status.FORBIDDEN.getStatusCode()) { 
      ForbiddenEntity reason = response.getEntity(ForbiddenEntity.class); 
      throw new RemoteResourceForbiddenException(reason.getCode(), reason.getReadableMessage()); 
     } 

     return response; 
    } 

} 

는 클라이언트 필터를 사용합니다.

stacktrace가 전송되지 않지만 "정확히 동일한"예외는 아닙니다. 그러나 클라이언트 응용 프로그램에서 의미가 없기 때문에 이것이 올바른 것입니다. stacktrace가 필요한 경우 서버 측에 ExceptionMapper을 사용하여 로그에 인쇄해야합니다.

+0

고마워요 조나스,이게 제가 정말로하고있는 일입니다. 그러나 발생한 예외의 FQN 이름으로 응답을 준비하는 방법 (응답 헤더? 쿠키)이있는 경우 약간 더 좋을 수 있습니다. 이것은 여전히 ​​기존의 비표준이지만 유용 할 것입니다. 아마도 이미 이와 같은 사실상의 대회가있을 것입니다. – zakmck

+0

AFAIK에는 REST와의 충돌과 같은 표준이 없습니다. – Jonas

관련 문제