【问题标题】:Need to send arraylist to webservice from client and return modified arraylist需要从客户端发送arraylist到webservice并返回修改后的arraylist
【发布时间】:2013-05-10 11:42:04
【问题描述】:

我已经开始使用@GET 方法创建一个基本的 web 服务,如下所示。

package com.webservice.eoin;

import java.awt.PageAttributes.MediaType;
import java.util.ArrayList;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;



@Path("/webservice")

public class Web_service {
@PUT
@Path("/getname")
@Produces("text/plain")

  public String getname()
  {
return "hello!!!";
  }




} 

当我运行它时它工作正常。我有所有的 jar 文件和 web.xml 文件设置等。我接下来要做的是创建一个客户端,它将字符串数组列表发送到 web 服务,并将修改后的数组列表版本返回给客户端。我的问题首先是你如何设置客户端?以及如何运行它,以便将这个数组列表发送到服务器。我已经阅读了很多教程,但我发现其中一些很难遵循。我是使用 Java 制作 Web 服务的新手。提前谢谢你

【问题讨论】:

    标签: java rest tomcat jersey


    【解决方案1】:

    首先,很抱歉我从我目前正在进行的项目中复制了很多代码,否则会很麻烦。如果我有拼写错误或编译错误,请原谅。另外,请注意您需要一个外部库。

    客户:

    import java.net.URI;
    import java.util.List;
    
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.UriBuilder;
    
    import com.sun.jersey.api.client.GenericType;
    import com.sun.jersey.api.client.WebResource;
    import com.sun.jersey.client.apache.ApacheHttpClient;
    import com.sun.jersey.client.apache.config.ApacheHttpClientConfig;
    import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig;
    
    public Client {
    
        private final URI fServerURI;
        private final ApacheHttpClient fClient;
        private final MediaType fMediaType= MediaType.APPLICATION_XML_TYPE;
    
        public Client() {
                final String apiEndpoint= "...";
                final DefaultApacheHttpClientConfig clientConfig;
                fServerURI= UriBuilder.fromUri(apiEndpoint).build();
                clientConfig= new DefaultApacheHttpClientConfig();
                clientConfig.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
                fClient= ApacheHttpClient.create(clientConfig);
        }
    
        private <T> T call(WebResource resource, RequestType requestType, Object requestEntity, GenericType<T> acceptType, String taskMessage) {
                return acceptCall(resource, requestType, acceptType, requestEntity);
        }
    
        private <T> T acceptCall(WebResource resource, RequestType requestType, GenericType<T> acceptType, Object requestEntity) {
               switch (requestType) {
               case POST:
                    return resource.accept(fMediaType).post(acceptType, requestEntity);
               case PUT:
                    return resource.accept(fMediaType).put(acceptType, requestEntity);
               case DELETE:
                    resource.accept(fMediaType).delete();
                    return null;
               default:
                    return resource.accept(fMediaType).get(acceptType);
        }
    
        public MyArrayList sendArrayList(MyArrayList list) {
               WebResource resource= createResource();
               resource= resource.path("webservice").path("sendarraylist");
               resource= resource.queryParam("arraylist", list);
               return call(resource, RequestType.POST, null, new GenericType<MyArrayList>() {
        }, "Send my array list");
        }
    
        public static void main(String ... args) {
               Client c= new Client();
               MyArrayList result= c.sendArrayList(new MyArrayList(/*whatevs goes inside*/));
        }
     }
    

    在服务器中你需要这样的东西:

        @POST
        @Path("/sendarraylist")
        @Consumes(MediaType.APPLICATION_XML)
        @Produces(MediaType.APPLICATION_XML)
        MyArrayList modifyList(@QueryParam("arraylist") MyArrayList list) {
            //do stuff
        }
    

    剩下的最后一件事就是根据 JAXB 规则创建 MyArrayList 类(参见这个例子:http://www.vogella.com/articles/JAXB/article.html

    【讨论】:

    • 另外我只是想知道我应该在单独的应用程序中运行客户端吗?
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2017-07-21
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多