2012-08-16 24 views
7

Tôi đang sử dụng Jersey Guice và cần phải cấu hình một phong tục ExceptionMapperTôi làm cách nào để sử dụng Jersey ExceptionMapper với Google Guice?

mô-đun của tôi trông như thế này:

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

Và đây là của tôi 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(); 
    } 
} 

Trả lời

14

ExceptionMapper của bạn phải được chú thích với @Provider và là một 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(); 
    } 
} 

Sau đó chỉ cần ràng buộc ExceptionMapper tại một trong những module Guice trong cùng Injector nơi JerseyServletModule của bạn, và Jersey Guice sẽ tìm thấy nó tự động.

import com.google.inject.AbstractModule; 

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

Bạn cũng có thể trực tiếp liên kết nó trong JerseyServletModule nếu bạn muốn:

public final class MyJerseyModule extends JerseyServletModule 
{ 
    @Override 
    protected void configureServlets() 
    { 
     ... 
     filter("/*").through(GuiceContainer.class); 
     bind(MyExceptionMapper.class); 
     ... 
    } 
} 
Các vấn đề liên quan