我是 Rest 网络服务的新手,我说我是使用 Netbeans 创建这个网络服务的
@Path("browse")
@Stateless
public class ArticleBrowseResource {
@EJB
private ArticleSearcherLocal ejbRef;
@GET
@Produces(MediaType.APPLICATION_XML)
public List<Article> browse(@DefaultValue("") @QueryParam("username") String username,@QueryParam("sd") String sd) {
// convert sd string to date
List<Article> articles = ejbRef.search(username, date);
return articles;
}
}
其中 Article
是一个用 @XmlRootElement
注释的实体
现在我应该如何在我的客户端 中检索这个文章列表,为了简单起见,我们只说它是一个 Java 标准应用程序?在 SOAP Web 服务中,我知道这些对象是自动生成的,但在 Rest 中不是。
这是 Netbeans 为该服务生成的客户端类
public class ArticleBrowseClient {
private WebResource webResource;
private Client client;
private static final String BASE_URI = "http://localhost:8080/cityblog/rest";
public ArticleBrowseClient() {
com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
client = Client.create(config);
webResource = client.resource(BASE_URI).path("browse");
}
public <T> T browse(Class<T> responseType, String username, String sd) throws UniformInterfaceException {
WebResource resource = webResource;
if (username != null) {
resource = resource.queryParam("username", username);
}
if (sd != null) {
resource = resource.queryParam("sd", sd);
}
return resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}
public void close() {
client.destroy();
}
}
解决此问题的最好和最简单的方法是什么?
感谢任何帮助, 提前谢谢
最佳答案
请尝试减少代码生成并更多地了解您实际在做什么。在服务器上,您在 JAXB 的帮助下生成 XML 消息。在客户端,您可以使用您喜欢的编程语言和库来使用此 XML。只需使用 curl 之类的工具看看“电线”上到底发生了什么。您生成的客户端站点看起来完全合理。您只需要客户端的服务器端的 Article 类。生成的代码使用 Jersey它可以默认读取每个 JAXB 的 XML 消息。因此,只需将服务器端的 Article 类放入客户端类路径中并使用它。但也请查看有线级协议(protocol)以了解 REST API 的可移植性。
关于java - 从 Restful 服务中检索实体列表(在客户端应用程序内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774211/