我正在使用 jersey,并且我想(在 POST 中)向服务器发送对象列表。这是场景:
@XmlRootElement
class Myclass{
//some primitive attributes + empty constructor + getter/setters
}
MyClass 既在服务器端又在客户端。
@XmlRootElement
class MyClasses{
private List<MyClass> classes = new ArrayList<MyClass>();
// put some MyClass into the list
}
class Sender{
MyClasses list = new MyClasses();
// after client initialization i want to send this list in a POST to server
WebResource service = client.resource(baseURI());
//I tried
service.type("application/xml").accept("application/xml").post(ClientResponse.class,list);
}
//在服务器端 @path("/tosend")
class receiver{
public Response posted(JAXBElement<MyClasses> vals){
//work with vals.getValue() as the list of all Objects
}
}
不幸的是,我遇到了这个错误: ContainerRequest getEntity :JAXBElement 和 JAXBElement 的消息正文读取器 并且未找到 MIME 类型 application/octet-stream。
我该如何解决这个问题?
最佳答案
你确定你的代码看起来和上面写的完全一样吗?该异常表明您没有设置请求的内容类型。不要使用 JAXBElement,并确保请求的内容类型设置为 application/xml。在您的代码片段中,您似乎正在这样做。但异常(exception)情况是媒体类型是应用程序/八位字节流。因此,要么代码片段与您的真实代码不匹配,要么异常来自代码的不同部分,或者您有一些过滤器在消息到达 posted()
方法之前更改消息头。使用 @Consumes(MediaType.APPLICATION_XML)
注释该方法。
顺便说一句,您不需要使用 MyClasses 包装类。您只需发送列表即可。
关于java - 如何使用 Jersey 将带注释的对象列表从客户端传递到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533675/