2015-07-02 38 views
6

我有一个简单的问题,我一直试图找出在我的办公室受限的互联网连接,但无济于事的答案。以xml或json作为参数的宁静web服务

1)如何在java中最好使用接受xml和/或json作为参数的netbeans创建一个宁静的web服务,以及如何处理它。

2)如何调用这些Web服务。我的意思是我们如何在URL中传递xml? 或者还有其他方法吗?如果我不得不使用API​​,我宁愿使用球衣。 如果问题太笼统,我很抱歉,但我需要在相对较短的时间内获得的所有知识。

+1

如果有什么任何建议提供链接,了解这个在你的办公室被限制? ;) – Garry

+0

我期待那..但值得一试 – wib

+1

你的两个问题都非常广泛。它使你看起来像没有零经验。如果是这样的话,我建议通过教程来运行。就个人而言,我只是从[用户指南](https://jersey.java.net/documentation/latest/index.html)的顶部开始。第一章会让你启动并运行。第三章将更深入地介绍基础知识。第九章将帮助您处理JSON和XML。另一种开始使用Netbeans的方式(真正快速,因此您可以跳过第1章)是查看[这个答案]的底部(http://stackoverflow.com/a/30546891/2587435) –

回答

1

您可以参考this链接。我希望这个链接可以从你的办公室内访问。

此外,接受参数的类型是您的要求的基础。 有两种注解用于接受和响应类型,分别是@consume(MediaType)@produce(MediaType)。您也将有指定的MediaType,像

MediaType.APPLICATION_JSON

MediaType.APPLICATION_XML_TYPE

2

这是如何做到的一般步骤这(我假设你已经安装了java和相应的环境变量):

1)下载并安装Apache Tomcat。配置Netbeans以标识已提取/安装的Apache Tomcat实例。 2)下载jersey jar文件并将它们添加到您的Web项目from here(链接:Jersey JAX-RS 2.0 RI包),或者在使用maven时使用所需的依赖关系。不要忘记将项目添加到Apache Tomcat服务器。

3)在项目的源文件夹中创建一个基于Jersey的java类。 在每个宁静的功能中,您将定义您将接受哪些数据,您将如何处理它们以及您将发送什么。这里是一个非常简单的例子:

@Path("/server") 
public class RestServer { 

    @POST 
    @Consumes(MediaType.TEXT_XML) 
    @Produces(MediaType.TEXT_XML) 
    public String basicPOSTRequest_XMLResponse(String xmlString) {   
     System.out.println("Received: " + xmlString); 
     return doSomethingWithString(xmlString); 
    } 
} 

4)创建包含您宁静的功能对应的Ajax调用WebContent文件夹中的“index.html的”文件。 (你在球衣类中创建的那些)。 在每个ajax调用中,您将使用jQuery功能发送和接收数据。下面是一个基本的Ajax调用例如:

function ajaxCall(xmlData) { 

$.ajax({ 
    type: "POST", 
    url: _baseURI + "/server", 
    contentType: "text/xml", 
    data: xmlData, 
    datatype: "text/xml", 
    success: 
      function (data, textStatus, jqXHR){ 
       alert(data); 
      }, 
    error: 
      function (jqXHR, textStatus, errorThrown) { 
       alert("error"); 
      } 
}); 
} 

注意,AJAX只是一个方式来使用你的宁静功能。例如,您可以使用另一个可以发送Http调用的java(或任何其他语言)程序来执行此操作。

5)从eclipse启动tomcat服务器。

6)使用你的index.html文件,通过点击它的url(通常是'http://localhost:8080/-yourProjectName-')来检查项目的宁静功能。

以上仅为准则。如果你想在任何步骤中获得更多细节,请告诉我,以便编辑我的答案。

3

你可以这样做。我目前正在研究这样做的web服务。

使用这些批注:

@POST 
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public Object create(Object object); 

在要传递的对象,你可以从javax.xml.bind.annotation包的注释。这样,java可以编组/解组这些自身。

@XmlRootElement(name = "Something") 
@XmlAccessorType(XmlAccessType.NONE) 
public class A { 

    private static final long serialVersionUID = 6478918140990163091L; 

    @XmlElementWrapper(name = "collectionWrapper") 
    @XmlElement(name = "collectionItem") 
    private final Collection<Object> domainCollection = new LinkedList<Object>(); 
} 

要访问做这样的事情:

final Builder request = ClientBuilder.newClient().target(getBaseUri()).path("url").request(MediaType.APPLICATION_XML); 
return request.post(Entity.entity(param, MediaType.APPLICATION_XML)).readEntity(A.class); 

按照本教程的例子:http://www.vogella.com/tutorials/REST/article.html