gpt4 book ai didi

java - RESTEasy 指南提供者

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

我在尝试将 Guice 与 ContainerRequestFilter 结合使用时遇到一个小问题,它会抛出 NullPointerException。我对 RESTEasy 做了一些深入研究,由于 @Context 注释不存在,它似乎找不到 MyFilter 的构造函数,在尝试实例化 null 构造函数时抛出 NullPointerException。

我的过滤器:

@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
private Dependency d;

@Inject
public MyFilter(Dependency d) {
this.d = d;
}

@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
if (d.doSomething()) {
Response r = Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
containerRequestContext.abortWith(r);
}
}
}

我已将过滤器添加到我的应用程序类中:

@ApplicationPath("")
public class Main extends Application {
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> c = new HashSet<Class<?>>();

public Main() {
c.add(Dependency.class);
}

@Override
public Set<Class<?>> getClasses() {
return c;
}

@Override
public Set<Object> getSingletons() {
return singletons;
}
}

我的 Guice 配置:

public class GuiceConfigurator implements Module {
public void configure(final Binder binder) {
binder.bind(Dependency.class);
}
}

我的 web.xml:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<display-name>My App</display-name>

<context-param>
<param-name>resteasy.guice.modules</param-name>
<param-value>com.example.GuiceConfigurator</param-value>
</context-param>

<listener>
<listener-class>
org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener
</listener-class>
</listener>
</web-app>

此配置用于将我的依赖项注入(inject)资源,但在尝试在提供程序上使用它时出现 NullPointerException。

如有任何帮助,我们将不胜感激。

最佳答案

似乎即使使用 RESTeasy/JAX-RS 组件,您仍然需要使用 Guice 绑定(bind)器注册它。起初我不确定,但看着 test cases , 看来我们仍然需要向 Guice 注册我们的资源和提供者以使其工作。

我在将过滤器添加到 Guice 模块后对其进行了测试,它按预期工作。

public class GuiceConfigurator implements Module {
public void configure(final Binder binder) {
binder.bind(MyFilter.class);
binder.bind(Dependency.class);
}
}

为了测试,我关闭了 example from the RESTeasy project , 添加了一个带有构造函数注入(inject)的过滤器,并将过滤器添加到模块绑定(bind)器中。并且在将过滤器添加到模块时有效,在未添加时失败。

关于java - RESTEasy 指南提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36555691/

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