我正在使用泽西,我想(在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的Message主体阅读器 和MIME类型application / octet-stream未找到。
我该如何解决?
答案 0 :(得分:2)
您确定您的代码与上面的代码完全一致吗?该异常表明您未设置请求的内容类型。不要使用JAXBElement,并确保将请求的内容类型设置为application / xml。在您的代码段中,您似乎正在执行此操作。但例外情况是媒体类型是application / octet-stream。因此,代码段与您的实际代码不匹配,或者异常来自代码的不同部分,或者您有一些过滤器在消息标题到达posted()
方法之前更改它们。使用@Consumes(MediaType.APPLICATION_XML)
注释方法。
顺便说一句,您不需要使用MyClasses包装器类。你可以简单地发送List,它也可以工作。
答案 1 :(得分:0)
使用MyClasses作为vals的类型设置消耗类型。
@POST
@Consumes( { MediaType.APPLICATION_XML })
public Response posted(MyClasses vals) {
//
return Response.ok.build();
}