VDe*_*Dev 35 java rest json 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字符串响应,但第3行将JSON编组到POJO没有发生,我得到以下异常堆栈跟踪
SEVERE: A message body reader for Java class [Lorg.shoppingsite.model.entity.jpa.User;, and Java type class [Lorg.shoppingsite.model.entity.jpa.User;, and MIME media type application/json was not found Dec 21, 2011 11:32:01 AM com.sun.jersey.api.client.ClientResponse getEntity SEVERE: The registered message body readers compatible with the MIME media type are: */* -> 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注释.我错过了什么
谢谢
小智 27
为了使它工作,你只需要两件事.检查您是否遗失:
如果你缺少,你需要为jersey-json添加依赖.为了你的参考,我把这个依赖添加到我的pom.xml中.
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)小智 10
就这么说吧
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
小智 10
我知道这篇文章已经很久了,你很久以前就已经知道了这个帖子,但只是为了挽救那些读过这篇文章的人.
您可能忘记将注释添加到要传递给端点的实体,因此Jersey不知道如何处理它收到的POJO.用这样的东西注释pojo:
@XmlRootElement(name = "someName")
Run Code Online (Sandbox Code Playgroud)
如果要构建uberjar或"阴影jar",请确保合并了meta inf服务文件.(这在一个dropwizard项目中多次出现.)
如果您使用的是gradle这个shadowJar插件,你想打电话给mergeServiceFiles()
你的shadowJar
目标:https://github.com/johnrengelman/shadow#merging-service-files
不确定maven或其他构建系统的类似命令是什么.