저지 기반 웹 서비스는 서비스 메소드에 의해 발생 된 예외를 원하는 HTTP 리턴 코드 (here)와 연관시킬 수 있다는 것을 알고 있습니다. 이제는 클라이언트가 서비스 메소드에 의해 생성 된 것과 동일한 예외를 생성 할 수있는 기회가 있습니까? 서버 측에서 MySpecificException이 발생하면 HTTP 응답에 이러한 정보 (예 : 예외 클래스의 FQN)를 저장하는 방법이 있는지 확인합니다 (자동으로 응답을 빌드하는 메서드를 사용하지 않으려 고합니다. POJO 또는 void를 반환하기를 원합니다. 클라이언트가 동일한 예외를 다시 throw 할 수 있도록 POJO 또는 void를 반환해야합니다.저지 : 클라이언트가 동일한 서버 예외를 throw하도록 만들기
1
A
답변
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
을 사용하여 로그에 인쇄해야합니다.
관련 문제
- 1. 에코 서버 만들기 : 연결된 클라이언트가 IO 예외를 받음
- 2. JUnit에게 호출하는 메소드에서 예외를 throw하도록 요청하십시오.
- 3. 저지 클라이언트가 Http 301에서 예외를 throw하지 않도록하려면 어떻게해야합니까?
- 4. 저지 클라이언트가 너무 많이 열립니다.
- 5. 저지 클라이언트가 파일을 다운로드하고 저장합니다.
- 6. JSON의 저지 예외를 반환하십시오.
- 7. 클라이언트가 예외를 throw하는 중임
- 8. 여러 클라이언트가 동일한 서버 모델을 업데이트합니까?
- 9. 분위기 저지 - 서버 메시지
- 10. 비누 클라이언트가 예외를 throw하지 않음
- 11. MapQuest 요청시 저지 클라이언트가 응답하지 않음
- 12. 애플릿의 저지 클라이언트가 JSON을 구문 분석하지 않습니다.
- 13. 예외를 직접 throw하도록 FileOutputStream.close()를 만드는 방법은 무엇입니까?
- 14. 무엇이 'System.Management.MTAHelper'에 대한 형식 이니셜 라이저에서 예외를 throw하도록
- 15. 바인딩 필드가 존재하지 않을 때 Silverlight DataGrid가 예외를 throw하도록 설정합니다.
- 16. 저지 서버 모니터링
- 17. 저지 클라이언트가 SAML GET 요청에서 멈춤
- 18. 저지 2 클라이언트가 즉시 연결을 닫지 않음
- 19. 저지 REST 클라이언트가 데이터베이스를 만들지 못했습니다.
- 20. 저지 REST 호출은 클라이언트가 아닌 브라우저에서 작동합니다.
- 21. 저지 클라이언트가 원격 시스템에 연결할 수 없음 (502 잘못된 게이트웨이)
- 22. 저지/잭슨 : json 매핑 예외를 잡는 방법?
- 23. 예외를 표시하는 저지 휴식 서비스 javax.ws.rs.WebApplicationException : javax.xml.bind.MarshalException
- 24. 필터에서 저지 예외 예외를 직렬화하면 오류가 발생합니다.
- 25. 강제 클라이언트가 ftp 서버
- 26. 저지 2.8 클라이언트가 5 개 이상인 경우 SSE 등록이 대기합니다.
- 27. 저지 자바 클라이언트가 HTTP 오류 코드를 반환했습니다 : 406
- 28. 서버 포트가 잘못되면 클라이언트가 응답을 기다리고 있습니다.
- 29. 원격 디버깅, 서버 만들기
- 30. Python에서 http 서버 만들기
[복제 됨] (http://stackoverflow.com/questions/15185299/jax-rs-jersey-exceptionmappers-user-defined-exception) – gks
나는 그것이 그 문제의 중복이라고 생각하지 않습니다. 여기에서는 클라이언트가 404가 아닌 UserNotFoundException을 생성했음을 클라이언트가 알 수 있기를 원합니다. 인증 된 사용자가 아닌 권한이 충분하지 않은 사용자에게 HTTP (HTTP) 코드를 생성하는 몇 가지 이유가 있기 때문에 필요합니다. 나는 오류 메시지에 의존하여 클라이언트 측의 세부 사항을 이해하고 싶지 않습니다. – zakmck