0

我们的中央银行以多种方式提供货币汇率。前任。日期的一种货币很容易获得:http ://api.nbp.pl/api/exchangerates/rates/a/usd/2020-08-20? format=json (它以简单的大括号 { 作为典型的 Json 开头)

但另一个表 - 日期的每种货币:http ://api.nbp.pl/api/exchangerates/tables/a/2020-08-20? format=json 在代码行之后返回“nullSession”

    if (httpURLConnection.getResponseCode() == okRespCode) { ...

尽管这个 Json 在 webbrowser 中显示没有任何问题。它以方括号 [ 作为数组开头。

你遇到过并解决过这样的问题吗?

请从我的 iDempiere 开发 IDE 中找到下面的异常堆栈跟踪。

PM org.compiere.process.SvrProcess 进程严重:nullSession java.lang.NoSuchFieldError: nullSession at sun.security.ssl.ClientHandshaker.getKickstartMessage(ClientHandshaker.java:1343) at sun.security.ssl.Handshaker.kickstart(Handshaker.java :1117) 在 sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1500) 在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl. java:1416) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1400) 在 sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 在 sun.net.www.protocol .https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570) 在 sun。net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498) 在 java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl. java:352) 在 one.stabilis.utils.JsonUtils.readJsonToString(JsonUtils.java:75) 在 one.stabilis.utils.JsonUtils.readArrayOfExchangeRatesTable(JsonUtils.java:108) 在 one.stabilis.utils.JsonUtils.publishedOnDateTable(JsonUtils .java:55) 在 one.stabilis.utils.JsonUtils.getPublishedOnDateTable(JsonUtils.java:32) 在 one.stabilis.impconvrates.ImportCurrencyRates.doIt(ImportCurrencyRates.java:84) 在 org.compiere.process.SvrProcess.process( SvrProcess.java:201) 在 org.compiere.process.SvrProcess.startProcess(SvrProcess.java:147) 在 org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:172) 在 org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:139) 在 org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:128) 在 org.compiere.interfaces.impl.ServerBean.process(ServerBean .java:78) 在 org.compiere.apps.AbstractProcessCtl.startProcess(AbstractProcessCtl.java:429) 在 org.compiere.apps.AbstractProcessCtl.run(AbstractProcessCtl.java:234) 在 org.adempiere.webui.apps.WProcessCtl。 org.adempiere.webui.apps.AbstractProcessDialog$ProcessDialogRunnable.doRun(AbstractProcessDialog.java:1083) 的进程(WProcessCtl.java:197) org.adempiere. .webui.apps.DesktopRunnable.run(DesktopRunnable.java:40) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266 ) 在 java.util 中。concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149 ) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

4

1 回答 1

2

您可以将响应映射为List<JsonNode>List<CustomMapperObject>

由于响应本身是一个数组而不是一个对象,你可以做这样的事情

String responseJson = "some array of objects";
List<CustomMapperObject> rates = objectMapper.readValue(responseJson, 
             ParameterizedTypeReference<List<CustomMapperObject>>() {
});

或者

ResponseEntity<List<CustomMapperObject>> responseObject = 
                       restTemplate.exchange(uri.toUriString(), HttpMethod.GET,
                       httpEntity,
                       new ParameterizedTypeReference<List<CustomMapperObject>>() {
                       });

我建议您查看杰克逊图书馆以供参考

于 2020-08-22T11:19:52.980 回答