javax.ws.rs.client.Client l- 来自本地文件的 JSON
Posted
技术标签:
【中文标题】javax.ws.rs.client.Client l- 来自本地文件的 JSON【英文标题】:javax.ws.rs.client.Client l- JSON from a local file 【发布时间】:2021-11-16 12:13:43 【问题描述】:我有这样的简单 REST 客户端代码,调用服务:
String myUrl = "http://somehost/someservice";
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
MyClass result = client.target(myUrl)
.request(MediaType.APPLICATION_JSON)
.get(MyClass.class);
// work with result
一切正常。现在,我想使用一些预先存储在 JSON 文件中的测试数据来练习处理代码。我希望我可以简单地使用文件 URL
String myUrl = "file://somepath/MyTest.json";
此异常失败。
Exception in thread "main" javax.ws.rs.ProcessingException: class sun.net.www.protocol.ftp.FtpURLConnection cannot be cast to class java.net.HttpURLConnection (sun.net.www.protocol.ftp.FtpURLConnection and java.net.HttpURLConnection are in module java.base of loader 'bootstrap')
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:309)
at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$1(JerseyInvocation.java:632)
at org.glassfish.jersey.client.JerseyInvocation.call(JerseyInvocation.java:654)
at org.glassfish.jersey.client.JerseyInvocation.lambda$runInScope$3(JerseyInvocation.java:648)
如何告诉 WS 客户端将文件视为伪服务提供者?
【问题讨论】:
这是一个 HTTP 客户端。所以我不确定这是否可能。也许使用自定义连接器,我不确定。 【参考方案1】:正如 Paul Samsothe 所说,Client 是一个 HTTP 客户端。就我的目的而言,使用这样的代码就足够了
ObjectMapper mapper = new ObjectMapper();
MyClass metData = mapper.readValue(
Paths.get("sample.json").toFile(),
MyClass.class
);
我可以将 HTTP 和 File 之间的选择隐藏在 Facade 后面。
【讨论】:
以上是关于javax.ws.rs.client.Client l- 来自本地文件的 JSON的主要内容,如果未能解决你的问题,请参考以下文章