gpt4 book ai didi

java - 如何将 Jersey ExceptionMapper 与 Google Guice 一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:15 26 4
gpt4 key购买 nike

我正在使用 Jersey Guice 并且需要配置自定义 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();
}
}

最佳答案

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

然后只需将 ExceptionMapper 绑定(bind)到您的 JerseyServletModule 所在的同一 Injector 中的其中一个 Guice 模块中,Jersey Guice 将自动找到它.

import com.google.inject.AbstractModule;

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

如果你想,你也可以直接在 JerseyServletModule 中绑定(bind)它:

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

关于java - 如何将 Jersey ExceptionMapper 与 Google Guice 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11987097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com