如何使用Jersey将带注释的对象列表从客户端传递到服务器

时间:2011-12-16 11:42:03

标签: java xml jaxb 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的Message主体阅读器     和MIME类型application / octet-stream未找到。

我该如何解决?

2 个答案:

答案 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();
}
相关问题