问题描述
我有一个myObject
pojo和类型为myObject
的列表,如下所示:
public static final GenericType<List<myObject>> myObjectList = new GenericType<List<myObject>>() {};
下面是用来打RestClient
类中的rest api的方法:
public <P> List<P> getAllOriginal(String resourcePath,GenericType<List<P>> entityType) {
Objects.requireNonNull(this.baseUri,"target cannot be null");
return this.client
.target(this.baseUri)
.path(resourcePath)
.request(MediaType.APPLICATION_JSON_TYPE)
.cookie("mySSO",getCookie())
.get()
.readEntity(entityType);
}
这就是我试图获取数据的方式:
list = restClient.getAllOriginal("myObject",myObjectList).
stream().map(PojoAction::new).collect(Collectors.toList());
以下是我从REST API收到的json:
{
"myObject" : [ {
"key" : {
"srcSys" : "REPO_1","srcSysRef" : "20200909_1911_1"
},"productData" : {
"id" : null,"number" : null,"isn" : null,"productId" : null,"productAdditionalData" : {
"assetClassTree" : "UNCLASSIFIED","description" : "UNCLASSIFIED","productTypeData" : {
"productType" : "UNCLASSIFIED","productGroup" : "UNCLASSIFIED"
}
}
},"state" : "OPEN","type" : "01"
},{
"key" : {
"srcSys" : "REPO_2","srcSysRef" : "20200403_3892_1"
},"productData" : {
"id" : "1","number" : "11","isn" : "null","productId" : 1234,"productAdditionalData" : {
"assetClassTree" : "xyz","description" : "abc","tradAcctType" : "01"
} ]
}
错误:
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<com.gs.liquidity.pojo.cash.CommitmentPojo>` out of START_OBJECT token
at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1,column: 1]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1442) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1216) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1168) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:332) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:265) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1682) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:977) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:814) ~[jackson-jaxrs-base-2.10.1.jar:2.10.1]
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256) ~[jersey-common-2.25.1.jar:?]
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235) ~[jersey-common-2.25.1.jar:?]
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155) ~[jersey-common-2.25.1.jar:?]
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085) ~[jersey-common-2.25.1.jar:?]
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874) ~[jersey-common-2.25.1.jar:?]
... 34 more
我的分析: 我了解此错误是由于数据不匹配造成的。我正在尝试获取列表,但api给了我对象。但是我不确定如何获取对象,因为我是REST和jersey的新手。我试图用Google搜索,但找不到任何重要信息。 您能指导我介绍一些文档或任何示例吗?
我发现了一些相关的问题: How to write a REST API method for which consume json format for list of objects
但是我在使用外部api时无法修改REST API的输出。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)