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的主要内容,如果未能解决你的问题,请参考以下文章