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

标签 java xml jaxb jersey

我正在使用 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/

相关文章:

java - 使用实体管理器进行 Junit 测试

java - 使用 Saxon 9 将 DocBook 文件转换为 EPUB

java - 将 JAXB 与包含许多相同元素的 XML 文件一起使用

java - JAXB 如何编码可选或可为空的元素

java - XMLAdapter:可配置的日期格式

java - AsyncRestTemplate ListenableFuture<T> 回调 + 超时

java - 是否有适用于 Web 应用程序的开源图像调整大小和 uploader ?

Java执行命令行程序

c# - 命名空间 'Serializable' 中不存在类型或命名空间名称 'System'(是否缺少程序集引用?

java - 如何在 List<Serializable> 内容 JaxB 中添加元素?