【问题标题】:REST API using Jersey 2使用 Jersey 2 的 REST API
【发布时间】:2013-12-13 10:27:22
【问题描述】:

我想使用 Jersey 2 实现一个 REST API,我想将资源分成接口及其实现,例如:

@Path("hello")
public interface HelloLogic {
    @GET
    @Produces("application/json")
    public String hello();
}

public class HelloLogicResource implements HelloLogic {
    public String hello() {
        return "{\"reply\": \"Hello\"}";
    }
}

不过,我没有任何运气可以暴露资源。对于刚才提到的 hello 资源,我希望以下内容就足够了:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new MyApplicationBinder());
    }
}

public class MyApplicationBinder extends AbstractBinder {
    @Override
    protected void configure() {
        bind(HelloLogic.class).to(HelloLogicResource.class);
    }
}

web.xml:

<servlet>
    <servlet-name>MyApplication</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>stines.api.MyApplication</param-value> 
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyApplication</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

pom.xml:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.4.1</version>
</dependency>

但是打的时候

http://localhost:8080/hello

我收到 404 响应:

我们将不胜感激 :) 谢谢。


新发现:它适用于:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        registerClasses(HelloLogicResource.class);
    }
}

【问题讨论】:

    标签: java rest jersey hk2


    【解决方案1】:

    编辑 1:您需要告诉 Jersey 您的资源在哪里:

    public MyApplication() {
        packages("stines.api.resources");
        register(new MyApplicationBinder());
    }
    

    我相信在这种情况下你想使用 HelloLogic 所在的包,但如果需要你也可以添加多个包:

    public MyApplication() {
        packages("stines.api.resources;stines.api.resources.impl");
        register(new MyApplicationBinder());
    }
    

    编辑 2:删除了关于向后 Guice 绑定的注释

    【讨论】:

    • 更新了我的答案,我想你也错过了给packages的电话。
    • 它似乎适用于我刚刚在问题底部添加的更简单的 MyApplication 。如果我尝试注册 HelloLogic,则会收到警告“类接口 stines.api.HelloLogic 的组件无法实例化并将被忽略”。
    • 它适用于我的问题末尾添加的 MyApplication,是的 :) 当我尝试按照您的建议注册 HelloLogic 时它不起作用。
    【解决方案2】:

    这行得通:

    public class MyApplication extends ResourceConfig {
        public MyApplication() {
            registerClasses(HelloLogicResource.class);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2017-08-01
      • 2015-04-20
      • 1970-01-01
      • 2012-06-16
      • 2014-11-15
      • 2017-11-23
      相关资源
      最近更新 更多