2012-08-16 18 views
7

estoy usando Jersey Guice y la necesidad de configurar una costumbre ExceptionMapper¿Cómo uso Jersey ExceptionMapper con Google Guice?

Mi módulo es el siguiente:

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

y este es mi 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(); 
    } 
} 

Respuesta

14

Su ExceptionMapper debe ser anotado con @Provider y sé un Singleton.

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(); 
    } 
} 

A continuación, sólo se unen al ExceptionMapper en uno de los módulos Guice en el mismo Injector donde su JerseyServletModule, y Jersey Guice lo encontrará automáticamente.

import com.google.inject.AbstractModule; 

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

También puede enlazar directamente en el JerseyServletModule si quieres:

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