我正在使用Jersey Guice,需要配置自定义 ExceptionMapper
我的模块看起来像这样:
public final class MyJerseyModule extends JerseyServletModule
{
@Override
protected void configureServlets()
{
...
filter("/*").through(GuiceContainer.class);
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的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();
}
}
Run Code Online (Sandbox Code Playgroud)
lex*_*ope 16
您的ExceptionMapper必须使用Monton注释@Provider并成为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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需绑定ExceptionMapper其中一个Guice模块Injector,你的JerseyServletModule和Zeice Guice会自动找到它.
import com.google.inject.AbstractModule;
public class MyModule extends AbstractModule
{
@Override
protected void configure()
{
...
bind(MyExceptionMapper.class);
...
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以直接绑定它,JerseyServletModule如果你想:
public final class MyJerseyModule extends JerseyServletModule
{
@Override
protected void configureServlets()
{
...
filter("/*").through(GuiceContainer.class);
bind(MyExceptionMapper.class);
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |