2014-10-30 5 views
6

요청 된 자원을 찾을 수 없을 때마다 서버가 아닌 (404) 응답을 사용자 정의하려고합니다 (또는 사용자 정의 WebApplicationException을 발생시킵니다. 요청한 리소스가 하나의 앱에 있는지 테스트 할 수 있다면 리소스 목록이 어딘가에 저장되어있을 수 있습니다. WebApplicationException을 확장 할 것을 제안하는 솔루션을 참조하지 마십시오. 그렇다고하더라도 내 문제는 리소스를 찾을 수없는 경우입니다. 그러나 저지 프레임 워크에서이 필요성을 표현하는 방법HttpServer가 자원을 찾을 수 없을 때 저지에서 사용자 정의 된 404 오류를 던지는 위치

+0

지금까지 어떤 시도를 했습니까? 'ExceptionMapper' 도움이 될 수 있습니다 ... – zyexal

+0

저지 중 어떤 버전을 사용합니까? –

+0

저지 2.x, 그리즐리 -http-server 2.3.0, 여기에서 예제를 시도 중입니다. [link] (https://github.com/jersey/jersey/tree/master/examples) –

답변

9

저지 throwsjavax.ws.rs.NotFoundException 엔드 포인트를 찾을 수없는 경우. 예외 맵퍼를 사용하여 원하는 응답으로 변환하십시오.

import javax.ws.rs.NotFoundException; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> { 

    public Response toResponse(NotFoundException exception) { 
     return Response.status(Response.Status.NOT_FOUND) 
       .entity("No such resource") 
       .build(); 
    } 
} 
+1

감사의 말 불행하게도 코드를 추가하고 메인 클래스가있는 패키지에'curl -g -i http : // localhost : 8080/base/@@@ 11'을 실행하면 내용이없는 404가 수신됩니다. 지금까지'@ Provider'가 리소스를 찾지 못했을 때 서버에게 전달할 클래스임을 알기 위해 여기에 있습니다. 그럼 어떻게 작동시키는거야?! –

+0

어딘가에 등록 할 필요가 없다고 생각합니까? 맞습니까? –

+0

패키지 스캔을 구성한 후 지정된 패키지에 공급자를 추가 한 경우 제대로 작동합니다. JAX-RS에는 여러 유형의 공급자가 있습니다 (자세한 내용은 http://stackoverflow.com/questions/13557442/what-does-provider-in-jax-rs-mean을 참조하십시오). ExceptionMappers를 사용하면 처리하려는 예외를 catch하고 사용자 정의 응답을 생성 할 수 있습니다. 이 경우 우리는 일치하는 리소스가 발견되지 않을 때 서버에 의해 throw되기 때문에 NotFoundException을 처리합니다. –