Java Jackson:无法反序列化com.org.my_services.external_services.ifs.converter.InventoryPricePayload的实例超出启动_数组令牌
我试图消耗的有效载荷看起来像 我有一个类列表,这些类应该映射到上面的JSON负载 存货价格有效载荷 最后将价格数据作为 我试着像这样测试这个Java Jackson:无法反序列化com.org.my_services.external_services.ifs.converter.InventoryPricePayload的实例超出启动_数组令牌,java,json,spring,jackson,object-object-mapping,Java,Json,Spring,Jackson,Object Object Mapping,我试图消耗的有效载荷看起来像 我有一个类列表,这些类应该映射到上面的JSON负载 存货价格有效载荷 最后将价格数据作为 我试着像这样测试这个 final ObjectMapper mapper = new ObjectMapper(); try { final InventoryPricePayload inventoryPricePayload = mapper.readValue(new File(getClass().getResource("/ge
final ObjectMapper mapper = new ObjectMapper();
try {
final InventoryPricePayload inventoryPricePayload = mapper.readValue(new File(getClass().getResource("/getInventoryAndPrice.json").getPath()), InventoryPricePayload.class);
System.out.println(inventoryPricePayload);
} catch (final IOException e) {
throw new RuntimeException("can not read resource :" + e.getMessage());
}
我得到的失败如下:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.742 sec <<< FAILURE! - in com.org.my_services.external_services.ifs.IFSManagerTest
testMockIfsClient(com.org.my_services.external_services.ifs.IFSManagerTest) Time elapsed: 0.615 sec <<< ERROR!
java.lang.RuntimeException: can not read resource :Can not deserialize instance of com.org.my_services.external_services.ifs.converter.InventoryPricePayload out of START_ARRAY token
at [Source: /Users/harith/IdeaProjects/my_services/external_services/ifs/target/test-classes/getInventoryAndPrice.json; line: 1, column: 1]
at com.org.my_services.external_services.ifs.MockIfsClient.getInventoryAndPrice(MockIfsClient.java:25)
at com.org.my_services.external_services.ifs.IFSManager.getInventoryAndPrice(IFSManager.java:20)
at com.org.my_services.external_services.ifs.IFSManagerTest.testMockIfsClient(IFSManagerTest.java:28)
问题:
我到底在哪里搞砸了?根据Jackson see数据绑定与泛型,我做了以下工作,一切顺利
final List<InventoryPriceDetail> inventoryPriceDetails= mapper.readValue(new File(getClass().getResource("/getInventoryAndPrice.json").getPath()), new TypeReference<List<InventoryPriceDetail>>() {});
而不是使用
新类型引用{}
这有点难看,因为您还可以使用类实现
mapper.getTypeFactory.ConstructionCollectionTypeList.class,InventoryPriceDetail.class个人意见:TypeReference使构造更具可读性。@daydreamer我想这是一个意见问题:
final ObjectMapper mapper = new ObjectMapper();
try {
final InventoryPricePayload inventoryPricePayload = mapper.readValue(new File(getClass().getResource("/getInventoryAndPrice.json").getPath()), InventoryPricePayload.class);
System.out.println(inventoryPricePayload);
} catch (final IOException e) {
throw new RuntimeException("can not read resource :" + e.getMessage());
}
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.742 sec <<< FAILURE! - in com.org.my_services.external_services.ifs.IFSManagerTest
testMockIfsClient(com.org.my_services.external_services.ifs.IFSManagerTest) Time elapsed: 0.615 sec <<< ERROR!
java.lang.RuntimeException: can not read resource :Can not deserialize instance of com.org.my_services.external_services.ifs.converter.InventoryPricePayload out of START_ARRAY token
at [Source: /Users/harith/IdeaProjects/my_services/external_services/ifs/target/test-classes/getInventoryAndPrice.json; line: 1, column: 1]
at com.org.my_services.external_services.ifs.MockIfsClient.getInventoryAndPrice(MockIfsClient.java:25)
at com.org.my_services.external_services.ifs.IFSManager.getInventoryAndPrice(IFSManager.java:20)
at com.org.my_services.external_services.ifs.IFSManagerTest.testMockIfsClient(IFSManagerTest.java:28)
final List<InventoryPriceDetail> inventoryPriceDetails= mapper.readValue(new File(getClass().getResource("/getInventoryAndPrice.json").getPath()), new TypeReference<List<InventoryPriceDetail>>() {});