客户端Jersey和RESTful放入对象列表



在我的应用程序中,我使用库jersey和Apache CXF来实现REST调用。特别是,我创建了我的DTO、一个服务和一个dao,以便通过put方法将记录插入数据库。

下面的代码正在工作,但我的问题是,当确定要传递一个DTO列表时,客户端会报告一个错误:

/* Client Rest */
WebResource service = clientJersey.get().resource(this.baseURI);        
GaraDTO garaDTO = new GaraDTO();
garaDTO.setVersion("0");
..........................
ClientResponse response = service.path("rest").path("gare").accept(this.mediaType).put(ClientResponse.class, garaDTO);
/* DTO */
@XmlRootElement(name = "gara")
public class GaraDTO {
private Integer version;
. . . . . . . . . . . .
public GaraDTO(){
}
@XmlElement
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
. . . . . . . . . . . .
}

/* Service */
@Override
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void putInsert(GaraDTO garaDto){
....................
//insert DB
....................
}

如果在创建了一个DTO的ArrayList之后,将该列表逐步添加到客户端,我会收到一个错误。

List<GaraDTO> listGaraDTO = new ArrayList();
listGaraDTO.add(garaDTO1);
listGaraDTO.add(garaDTO2);
.............................. 
ClientResponse response = service.path("rest").path("gare").accept(this.mediaType).put(ClientResponse.class, listGaraDTO);

如何传递DTO列表?

感谢

如果您想让API接受一个List,您需要让它真正接受一个列表,而不是一个GaraDTO。

//客户端

package com.project.rest.model;
import java.util.HashSet;
import java.util.Set;
public class Client {
    private Long id;
    private String email;
    private String lang;
    public Client() {
    }
    public Client(Long id) {
    this.id = id;
    }
    public Client(Long id, String email, String lang) {
    this.id = id;
    this.email = email;
    this.lang = lang;
    }
    public Long getId() {
    return id;
    }
    public void setId(Long id) {
    this.id = id;
    }
    public String getEmail() {
    return email;
    }
    public void setEmail(String email) {
    this.email = email;
    }
    public String getLang() {
    return lang;
    }
    public void setLang(String lang) {
    this.lang = lang;
    }

    @Override
    public String toString() {
    return "Client [id=" + id + ", email=" + email + ", lang=" + lang + "]";
    }
}

//客户端服务

package com.project.rest;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.project.rest.model.Client;
@Path("/client")
public class ClientService {
    @POST
    @Path("/sendList")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response consumeJSONList(List<Client> clientList) {
        String output = "consumeJSONList Client : " + clientList.toString() + "nn";
        return Response.status(200).entity(output).build();
    }
}

//JerseyClient

package com.project.rest;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.MediaType;
import com.project.rest.model.Client;
import com.project.rest.model.Device;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.json.JSONConfiguration;
public class JerseyClient {
public static void main(String[] args) {
try {
    List<Client> clientList = new ArrayList<Client>();
    clientList.add(new Client(1L, "pruebas@pruebas.com", "es"));
    clientList.add(new Client(2L, "pruebas@pruebas.com", "es"));
    clientList.add(new Client(3L, "pruebas@pruebas.com", "es"));
    ClientConfig clientConfig = new DefaultClientConfig();
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
    com.sun.jersey.api.client.Client c = com.sun.jersey.api.client.Client.create(clientConfig);
    WebResource webResource = c.resource("http://localhost:8080/project_rest/rest/client/sendList");
    ClientResponse response = webResource.accept("application/json").type("application/json").post(ClientResponse.class, clientList);
    if (response.getStatus() != 200) {
    throw new RuntimeException("Failed sendClientList: HTTP error code : " + response.getStatus());
    }
    String output = response.getEntity(String.class);
    System.out.println("sendClientList... Server response .... n");
    System.out.println(output);
} catch (Exception e) {
    e.printStackTrace();
}
}
}

//POM.xml

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.10-b01</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.18.1</version>
</dependency>
<dependency>
  <groupId>com.owlike</groupId>
  <artifactId>genson</artifactId>
  <version>0.99</version>
</dependency>

最新更新