- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
大家好我正在尝试从头开始创建一个休息网络服务。这是我的服务部分
@Path("/Phones")
public class PhonessResource {
@GET
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response getAllNumbers(){
List<PhoneDetail> list = PhoneDirectoryDao.getInstance().getAllNumbers();
GenericEntity<List<PhoneDetail>> entity = new GenericEntity<List<PhoneDetail>>(list) {};
Response response =Response.ok(entity).status(200).build();
return response;//PhoneDirectoryDao.getInstance().getAllNumbers();
}
}
我的数据模型:我有我的 getter 和 setter 以及另一个获取所有属性的构造函数,我没有将它粘贴到更少的问题长度,我在客户端和服务器中使用相同的数据模型
@XmlRootElement(name="PhoneDetail")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"id","firstName","lastName","address","phoneNo","timeStamp"})
public class PhoneDetail {
private int id;
private String firstName;
private String lastName;
private String address;
private String phoneNo;
private Timestamp timeStamp;
public PhoneDetail() {}
}
然后我创建一个 java 客户端来测试服务。我使用的是 NETBEANS IDE,所以我在 IDE 中选择默认选项来创建它
因此我创建了一个 Jersey 客户端
public class PhoneCLient {
private WebTarget webTarget;
private Client client;
private static final String BASE_URI = "http://localhost:8080/Phones/webresources";
public PhoneCLient() {
client = javax.ws.rs.client.ClientBuilder.newClient();
webTarget = client.target(BASE_URI).path("Items");
}
public <T> T getAllNumbers_XML(Class<T> responseType) throws ClientErrorException {
WebTarget resource = webTarget;
return resource.request(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}
public <T> T getAllNumbers_JSON(Class<T> responseType) throws ClientErrorException {
WebTarget resource = webTarget;
return resource.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).get(responseType);
}
}
但是它给了我这个错误
Exception in thread "main" org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/xml, type=class org.glassfish.jersey.client.ClientResponse, genericType=class org.glassfish.jersey.client.ClientResponse.
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:173)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:134)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:988)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:833)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:768)
at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:96)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:740)
at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:88)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:650)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:421)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:646)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:375)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:275)
at PhoneDirectoryClient.rest.PhoneCLient.getAllNumbers_XML(PhoneCLient.java:45)
但是当我在浏览器或 RestClient 浏览器插件中测试服务时,它工作正常。 谁能告诉我哪里出了问题??
最佳答案
对于 Xml,如果您拥有 Jersey 附带的所有依赖项,那么它应该适用于客户端 API。您可能没有添加所有这些。我看到您没有使用 Maven,我强烈建议您这样做。但我会提供两种方法来处理这个问题。
行家:
只有启动和运行客户端所需的依赖项(具有 JAXB xml 支持)
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.13</version>
</dependency>
不会变得更简单 :-)
非 Maven:
所以使用 Maven 项目,我添加了上面的依赖,这些都是它拉入的传递依赖。在你的非 Maven 项目中,你将需要手动添加所有这些 jar。
如果您转到 Jersey Hompage ,转到下载,然后下载“Jersey JAX-RS 2.0 RI bundle
。您应该在那里找到所有这些依赖项。您应该将所有需要的添加到您的项目中
注意:Netbeans 已经带有 Jersey 2.0 (JAX-RS RI)
库。您可以改为简单地将该库添加到您的项目中。只需右键单击项目中的 [Libraries] 节点,然后选择 [Add Library]。您应该会在对话框中看到 Jersey。这个解决方案可能是最简单的,但它会导入所有 Jersey 依赖项,比客户端 API 所需的更多
JSON 需要另一个依赖:
行家:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.13</version>
</dependency>
非 Maven
看看this post获取图片和进一步解释。
只需将这些依赖项添加到类路径中即可,无需任何特殊配置。
在较新版本的 Jersey 客户端中,jersey-media-jaxb
不再被引入,您需要手动添加它以获得 XML/JAXB 支持。
关于java - 玻璃鱼 :MessageBodyProviderNotFoundException in Jersy Client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26945281/
大家好,我是 android/glass 开发的新手,所以如果我错了请纠正我。 我尝试创建一个很好的高频实时卡片。然而,当我关闭应用程序时,函数 surfaceDestroyed() 没有得到触发并且
我正在编写一些 C# 代码,我想在其中获取一个 2D 矩形并将其拆分为更小的 2D 多边形。我希望效果看起来像矩形是由玻璃制成的,并且在随机位置用锤子敲击它。我想知道是否有人知道一个好的算法来帮助我解
我有一个无边框、不可调整大小的 WPF 窗体(WindowStyle=None、AllowsTransparency=True、ResizeMode=NoResize),背景是半透明的。下面是在记事本
我想在使用 OpenGL(带着色器)的屏幕转换中做类似的事情。我一直在寻找一些教程或类似的东西,但没有任何效果。我怎样才能达到这种效果? 最佳答案 只是关于如何开始的一些想法.. 如果您确实从 3D
我在对半透明叠加 div 应用模糊效果时遇到问题。我希望 div 后面的所有内容都变得模糊,像这样: 这是一个不起作用的 jsfiddle:http://jsfiddle.net/u2y2091z/
我(终于!)找到了一种在玻璃上呈现 Windows.Forms 控件的方法,它似乎没有任何重大缺点,也没有任何大的实现时间。它的灵感来自 this article来自 Coded,它基本上解释了如何
基本上 在一个 Activity 中,我有一个 ListView。当我选择一个项目时,一个透明的 Activity 会以一个小框的形式打开。当此框出现时,您仍然可以查看之前的 Activity 屏幕,
我有许多在过去编写的实用程序,看起来非常过时。所以我最近开始让他们使用 Windows 主题,并希望加入一些 Aero 玻璃效果。 问题是,我不太确定合适的用途是什么。 IE7 和现在的 Firefo
我能否以某种方式禁用我的 WPF 应用程序窗口的玻璃/透明度? 注意:我不想禁用 Aero,只是禁用玻璃/透明度和我的窗口,而不是整个系统。 类似这样的东西(Enable Transparency 复
对于 Google Glass 应用程序,如何让您的应用程序在向下滑动到主玻璃菜单时优雅地退出? 在 MainActivity 中尝试这段代码: @Override protected
我有一个发布一对实时卡片的 Google Glass 应用程序。当我单击这些卡片时,它会将我带到 Activity 的 UI。我想做的是拦截其中一张卡片的点击,而不是将 View 更改为 Activi
有人知道,Google Glass 会支持 OpenGL ES 吗?如果是这样,它会是1.1吗? 2? WebGL? 我确信这可能必须在 GDK (GNDK?) 发布时使用,但有计划使其成为可能吗?
我有一个以 CardScrollView 作为 Activity 的应用程序。 Ok Glass => My App => Ok Glass => Next Page
我在 JFrame 玻璃 Pane 顶部放置了一个 JFilechooser。当我选择“查找”弹出窗口时,它似乎显示在 JFilechooser 后面。我不久前用网上找到的一个解决方案修复了这个问题,
我有一个简单的 Glass 应用程序,它使用 GDK 抓取一些文本并拍照。我可以轻松创建带有文本和照片的 LiveCard,但是当我尝试将实时卡片转换为静态卡片时,当我尝试将图像添加到卡片时出现空指针
我是一名优秀的程序员,十分优秀!