【发布时间】: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);
}
}
【问题讨论】: