我创建一个REST服务,我想返回对象的名单。 所以我有这样的事情:
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("items/")
@XmlElementWrapper(name = "items")
public List<AClass> getItems() {
List<AClass> list = db.getItems();
return list;
}
其中db.getItems()返回是一种类型的ACLASS亚类的对象的列表。 ACLASS是一个抽象类。 对象有更多的字段添加。 但这些额外的字段不是在一个XML生成。 我怎样才能让他们的结果呢?
你看XmlSeeAlso ? 该批注将允许您绑定子类。
//客户端
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 + "]";
}
}
// ClientService
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() + "\n\n";
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>