REST JAX-RS自定义上下文提供程序不起作用

时间:2019-01-15 10:26:32

标签: java rest jersey jax-rs

我在Java 11和Tomcat 9服务器上使用glassfish Jersey JAX-RS。在我的应用程序中@Context对象变为空之后,我最近将Jersey版本升级到2.27。该对象属于第三方API。

在第三方API中,具有context元素的Jersey版本是1.19,并且它属于com.sun软件包,而不是我正在使用的org.glassfish。 我叫的Rest方法看起来像:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Pageable<Role> getRoles(@Context final Search search) throws ServerException {

    return new Pageable<>(identityManagementService.getRoles(), search);
}

其调用以下内容:

public Pageable(final List<T> list, final Search search) {
    this.count = list.size();
    this.data = list;
    if (search.getLimiter() != null && search.getLimiter().getCount() != 0) {
        this.data = list.stream()
               .skip(search.getLimiter().getOffset())
                .limit(search.getLimiter().getCount())
                .collect(Collectors.toList());

} }

第三方Pom.xml具有以下条目:

<dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.19</version>
        <optional>true</optional>
        <exclusions>
            <exclusion>
                <artifactId>asm</artifactId>
                <groupId>asm</groupId>
            </exclusion>
        </exclusions>
    </dependency>

我的pom.xml中有以下条目:

<dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.27</version>
        </dependency> 

搜索对象在运行时变为null,导致我的应用程序失败。两个运动衫版本之间是否存在任何兼容性问题,或者我缺少任何东西。是否有人已经一起使用Jersey JAX-RS 2.27和Java 11?

1 个答案:

答案 0 :(得分:0)

问题已解决。将我的Jersey更新到2.27后,我指的是HK2程序包的AbstractBinder。 Jersey Jax-RS的新版本与HK2脱钩。导入org.glassfish.jersey.internal.inject.AbstractBinder并实现相应的覆盖方法可以解决此问题。 Jersey HK2 Dependency Injection doesn't work after update to v2.27此处发布的答案有助于我解决该问题。

谢谢