我正在使用JAX-RS
我的Web服务。我有通用的功能,想使用继承。我正在提供简单的CRUD操作。我已经定义了这样的接口:
public interface ICRUD {
@POST
@Consumes("application/json")
@Produces("application/json")
@Path("create")
public String createREST(String transferObject);
@GET
@Consumes("application/json")
@Produces("application/json")
@Path("retrieve/{id}")
public String retrieveREST(@PathParam("id") String id);
@POST
@Consumes("application/json")
@Produces("application/json")
@Path("update")
public void updateREST(@Suspended final AsyncResponse asyncResponse,
final String transferObject) ;
@DELETE
@Consumes("application/json")
@Produces("application/json")
@Path("delete/{id}")
public String deleteREST(@PathParam("id") String id);
}
我有一个实现此接口的抽象类:
public abstract class BaseREST implements ICRUD{
private final ExecutorService executorService = Executors.newCachedThreadPool();
@Override
public String createREST(String transferObject) {
return create(transferObject).toJson();
}
@Override
public String retreiveREST(@PathParam("id") String id) {
return retreive(id).toJson();
}
@Override
public String deleteREST(
@PathParam("id") String id) {
return delete(id).toJson();
}
@Override
public void updateREST(@Suspended final AsyncResponse asyncResponse, final String transferObject) {
executorService.submit(new Runnable() {
@Override
public void run() {
asyncResponse.resume(doUpdateREST(transferObject));
}
});
}
}
最后,我的实现类仅为资源提供PATH:
@Path("meeting")
public class MeetingRestServices extends BaseREST {
}
当我尝试访问我的资源时(假设上下文根为/):
http://localhost:8080/webresources/meeting/retreive/0
我得到一个404,它说找不到。我的想法是,在继承的某个地方,它弄乱了我认为资源应位于的位置的路径。有什么想法吗?
webresources在下面定义。该类由Netbeans自动添加。
@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
/**
* Do not modify addRestResourceClasses() method.
* It is automatically populated with
* all resources defined in the project.
* If required, comment out calling this method in getClasses().
*/
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(com.dv.meetmefor.ws.impl.BinaryDataRestService.class);
resources.add(com.dv.meetmefor.ws.impl.ImageRestServices.class);
resources.add(com.dv.meetmefor.ws.impl.LocaleRestService.class);
resources.add(com.dv.meetmefor.ws.impl.MeetUpRestServices.class);
resources.add(com.dv.meetmefor.ws.impl.MeetingRestServices.class);
resources.add(com.dv.meetmefor.ws.impl.UserAccountRestServices.class);
}
}
您上面描述的内容看起来不错。这是基于所提供的内容的JAX-RS继承规则。
根据JAX-RS规范§3.6:
JAX-RS注释可以在超类或已实现接口的方法和方法参数上使用。此类注释由相应的子类或实现类方法继承,前提是该方法及其参数没有自己的任何JAX-
RS注释。超类上的注释优先于已实现接口上的注释。如果子类或实现方法具有任何JAX-RS批注,那么将忽略超类或接口方法上的所有批注。例如:
public interface ReadOnlyAtomFeed {
@GET @Produces("application/atom+xml")
Feed getFeed();
}
@Path("feed")
public class ActivityLog implements ReadOnlyAtomFeed {
public Feed getFeed() {...}
}
在上面,从接口ActivityLog.getFeed
继承@GET
和@Produces
注释。反过来:
@Path("feed")
public class ActivityLog implements ReadOnlyAtomFeed {
@Produces("application/atom+xml")
public Feed getFeed() {...}
}
在上面,@GET
on 的注释ReadOnlyAtomFeed.getFeed
不被继承ActivityLog .getFeed
webresources定义如下。这个类是由NetBeans自动添加的。
我有一个抽象类,它声明了方法: 然后一个类实现该方法: 更新: 我从零开始使用Java EE7,这很有效。
JAX-RS (JSR 311) 是一个社区驱动的标准用于使用 Java 构建 RESTful Web 服务。
我的jax-rs应用程序的方法: 工作正常。但是,如果修改: 我收到一个错误 服务器Jboss 7.1.1 请告诉我怎么了。 PS.sorry我的英语不好。
JAX-RS教程提供了JAX-RS API的概念和示例。 这个JAX-RS教程专为初学者和专业人士设计。 JAX-RS API有两个主要实现。它们分别如下 - Jersey RESTEasy 如下图示 - RESTful JAX-RS示例(Jersey) https://www.xnip.cn/web_service/jax-rs-example-jersey.html JAX-WS注释示例 ht
JAX-RS (JSR 311) 是一个社区驱动的标准用于使用 Java 构建 RESTful Web 服务。JAX-RS 的参考实现是 Jersey,并提供 OSGI 绑定。该项目用于连接服务层的 Jersey 和 OSGi。这意味着 OSGi 服务可发布为 RESTful Web 服务。