我首先使用如下所示的 @GET 方法创建了一个基本的网络服务。
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 服务,并将数组列表的修改版本返回给客户端。我的问题首先是您如何设置客户端?以及如何运行它以便将此 arraylist 发送到服务器。我阅读了很多教程,但我发现其中一些教程很难理解。我是用 Java 制作网络服务的新手。提前谢谢你
最佳答案
首先,很抱歉我从我目前正在做的项目中复制了很多代码,否则会很麻烦。如果我有拼写错误或编译错误,请原谅。另外,请注意您为此需要一个外部库。
客户端:
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)
关于java - 需要从客户端发送arraylist到webservice并返回修改后的arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481448/