我在将自定义对象转移到客户端时遇到问题。如何将自定义对象传输到客户端并将其接收回Web服务?我正在通过块传输文件。我想知道我应该如何写我的客户。我尝试在客户端中将其作为MediaType.APPLICATION_JSON
传递但我没有得到任何结果意味着它不会传递回Web服务。下面是我正在研究的一些代码。
web服务
@POST
@Path("/fileTransfer")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public final TransferInfomation transferInfo(final FileModel file)
{
...
}
...(某些代码)(我们只想说一个 syso )
FileModel类
public class FileModel {
private String fileID;
private DataHandler dataHandler;
/**
* Constructor.
*/
public FileModel() {
}
(假设制定了设定者和吸气剂)
(不确定网络服务是否正确)。还在学习REST,我想知道客户应该如何。
提前感谢。
答案 0 :(得分:3)
在Jersey中“编组”和“解组”“自定义对象”(在JSON,XML等中)的一种好方法是使用JAXB(https://jaxb.java.net/)。
要做到这一点,你需要创建一个“jaxb类”,使用正确的getter和setter(和注释),例如:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class FileModel{
private String fileID;
private DataHandler dataHandler;
public String getFileID(){
return fileID;
}
public void setFileID(String fileID){
this.fileID = fileID;
}
public DataHandler getDataHandler(){
return dataHandler;
}
public void setDataHandler(DataHandler dataHandler){
this.dataHandler = dataHandler;
}
}
不要忘记声明@XmlRootElement
。然后,您可以在API端点(方法)中简单地声明和使用这些对象:
@POST
@Path("/fileTransfer")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public final FileModel transferInfo(FileModel file)
{
// read file in "FileModel" format
// ... make several operations
// return new FileModel (or another format if you will)
}
这应该有效。确保在客户端正确遵循为FileModel定义的数据结构。请参阅此处有关如何在Jersey中处理该示例的示例:How do I POST a Pojo with Jersey Client without manually convert to JSON?(其中也使用了JAXB)。
答案 1 :(得分:2)
您的REST端点表示您要使用和生成JSON。因此,REST客户端需要将可以反序列化的JSON发送到FileModel
,并且TransferInfomation
返回的transferInfo
需要序列化为JSON才能返回到客户端。
通常,RESTEasy,Restlet,Camel和Spring MVC等Java REST框架提供了一些工具,可让您定义JSON序列化程序/反序列化程序,如Jackson以及来自JSON< - >的映射规则Java和框架为您处理细节。
因此,如果您使用其中一个框架,则只需将它们配置为使用首选JSON工具并定义规则。
答案 2 :(得分:0)
你可以像下面这样:
服务器端:
@PUT
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public String addRecord(CustomClass mCustomClass)
{
///
///
///
return "Added successfully : "+CustomClass.getName();
}// addRecord
客户端:
public static void main(String[] args)
{
///
///
///
CustomClass mCustomClass = new CustomClass();
Client client = ClientBuilder.newClient();
String strResult = client.target(REST_SERVICE_URL).request(MediaType.APPLICATION_XML).put(Entity.xml(mCustomClass), String.class);
}