2012-08-16 1 views
7

내가 저지 Guice를 사용하여 사용자 정의를 구성해야하고 ExceptionMapper 내 모듈은 다음과 같습니다Google Guice에서 Jersey ExceptionMapper를 사용하려면 어떻게해야합니까?

:

public final class MyJerseyModule extends JerseyServletModule 
{ 
    @Override 
    protected void configureServlets() 
    { 
     ... 
     filter("/*").through(GuiceContainer.class); 
     ... 
    } 
} 

을 그리고 이것은 내 ExceptionMapper :

import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 
import javax.ws.rs.ext.ExceptionMapper; 

public class MyExceptionMapper implements ExceptionMapper<MyException> 
{ 
    @Override 
    public Response toResponse(final MyException exception) 
    { 
     return Response.status(Status.NOT_FOUND).entity(exception.getMessage()).build(); 
    } 
} 

답변

14
귀하의 ExceptionMapper이 주석해야

@Provider이며 싱글 톤이되어야합니다.

import com.google.inject.Singleton; 

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

@Provider 
@Singleton 
public class MyExceptionMapper implements ExceptionMapper<MyException> 
{ 
    @Override 
    public Response toResponse(final MyException exception) 
    { 
     return Response.status(Status.NOT_FOUND).entity(exception.getMessage()).build(); 
    } 
} 

그런 다음 당신의 JerseyServletModule 같은 Injector에 Guice 모듈 중 하나에 ExceptionMapper을 결합, 저지 Guice는 자동으로 찾을 수 있습니다.

public final class MyJerseyModule extends JerseyServletModule 
{ 
    @Override 
    protected void configureServlets() 
    { 
     ... 
     filter("/*").through(GuiceContainer.class); 
     bind(MyExceptionMapper.class); 
     ... 
    } 
} 
:

import com.google.inject.AbstractModule; 

public class MyModule extends AbstractModule 
{ 
    @Override 
    protected void configure() 
    { 
     ... 
     bind(MyExceptionMapper.class); 
     ... 
    } 
} 

당신은 직접 당신이 원하는 경우 JerseyServletModule에 바인딩 할 수 있습니다

관련 문제