【发布时间】:2013-12-07 12:49:40
【问题描述】:
我可以创建一个带有接口和实现类的restful服务吗?
如果是这样,所有与 JAX-RS 相关的导入都会进入接口吗?
我正在使用 jersey2.4 和 jetty8.1。
这是我的MyService界面:
package foo.bar;
@Path("/abc")
public interface MyService {
@GET
@JSONP
@Path("/method/{id}")
public MyResponse getStuff(@PathParam("id") Integer id);
}
以及MyServiceImpl该接口的实现
package foo.bar.impl;
public class MyServiceImpl implements MyService {
public MyServiceImpl() {}
@Override
public MyResponse getStuff(Integer id) {
// do stuff
return MyResponse;
}
}
这是 web.xml 文件:
<servlet>
<servlet-name>Scivantage REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>foo.bar</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我注册了这个服务提供商包 (foo.bar) 但它抱怨说这个
javax.servlet.ServletException: A MultiException has 1 exceptions. They are:|1. java.lang.NoSuchMethodException: Could not find a suitable constructor in foo.bar.MyService class.
当我尝试使用实现类包 (foo.bar.impl) 时,它抱怨说这个
I get HTTP ERROR 404; doesn't do anything else; no exceptions on console
当我尝试两者时 - 它的抱怨与上述相同:
javax.servlet.ServletException: A MultiException has 1 exceptions. They are:|1. java.lang.NoSuchMethodException: Could not find a suitable constructor in foo.bar.MyService class.
我做错了什么?
【问题讨论】:
-
你有没有想过这个问题?我有同样的问题。
-
是的,但不是我描述的方式。我们分离了资源类和服务类。资源类将“组成”服务对象引用。您可以遵循服务对象的继承原则。希望这会有所帮助。
-
我发现这是 Jersey 的一个错误,当您使用它的包扫描自动搜索提供者/等时。如果您显式注册资源/提供者类,则不会出现此错误。
标签: web-services jetty jackson jersey-2.0 jetty-8