【发布时间】:2012-01-25 13:16:54
【问题描述】:
我有一个基于 Jersey 的 Rest WS,它输出 JSON。我正在实现一个 Jersey 客户端来调用 WS 并使用 JSON 响应。我的客户端代码如下
WebResource r = restClient.resource(UriBuilder.fromUri("http://localhost/").port(8080).build()); String resp = r.path("/user").accept(MediaType.APPLICATION_JSON).get(String.class); User[] users = r.path("/user").accept(MediaType.APPLICATION_JSON).get(User[].class);第二行正确输出 JSON 字符串响应,但是将 JSON 编组到 POJO 的第三行没有发生,我得到以下异常堆栈跟踪
严重:Java 类 [Lorg.shoppingsite.model.entity.jpa.User; 和 Java 类型类 [Lorg.shoppingsite.model.entity.jpa.User; 和 MIME 媒体类型 application/json 的消息正文阅读器没有成立 2011 年 12 月 21 日上午 11:32:01 com.sun.jersey.api.client.ClientResponse getEntity SEVERE:与 MIME 媒体类型兼容的注册消息正文阅读器是: */* -> com.sun.jersey.core.impl.provider.entity.FormProvider com.sun.jersey.core.impl.provider.entity.StringProvider com.sun.jersey.core.impl.provider.entity.ByteArrayProvider com.sun.jersey.core.impl.provider.entity.FileProvider com.sun.jersey.core.impl.provider.entity.InputStreamProvider com.sun.jersey.core.impl.provider.entity.DataSourceProvider com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.ReaderProvider com.sun.jersey.core.impl.provider.entity.DocumentProvider com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General com.sun.jersey.core.impl.provider.entity.EntityHolderReader我的请求中有正确的 MIME 类型。我的 POJO 已经用 XMLRootElement 进行了注释。我错过了什么。
谢谢
【问题讨论】:
-
仅供参考...在我的情况下,代码在 IntelliJ 中运行良好,但在打包和部署时失败。我使用带有 jar-with-dependencies 选项的
maven-assembly-plugin。我将改用 JacksonObjectMapper,这是一种解决方法。 -
@PatS 我面临着类似的问题。代码在使用 Intellij 运行时运行良好,但在打包时抛出相同的错误。与您不同,我无权使用 Jackson ObjectMapper,因为问题在于依赖关系。您找到解决问题的替代方案了吗?
-
@Ajay。我标记的解决方案对我有用。我的猜测是,在您的 IntelliJ 中,您有一些需要的 jar 文件或者是“正确的版本”,并且它是在另一个文件中挑选出来的。这类问题很困难。我建议尝试使用 Shade 插件(请参阅 maven.apache.org/plugins/maven-shade-plugin)并启用调试以查看哪些类是重复的。在 IntelliJ 之外运行时,代码很可能引入了错误版本的文件。