我有两个问题:
-
如何使用Spring RestTemplate映射JSON对象列表 .
-
如何映射嵌套的JSON对象 .
我正按照http://spring.io/guides/gs/consuming-rest/的教程尝试使用https://bitpay.com/api/rates .
我有两个问题:
如何使用Spring RestTemplate映射JSON对象列表 .
如何映射嵌套的JSON对象 .
我正按照http://spring.io/guides/gs/consuming-rest/的教程尝试使用https://bitpay.com/api/rates .
10 回答
也许这样......
RequestMapping
的控制器代码ResponseEntity
是HttpEntity
的扩展,它添加了HttpStatus
状态代码 . 用于RestTemplate
以及@Controller
方法 . 在RestTemplate
中,此类由getForEntity()
和exchange()
返回 .首先定义一个对象来保持实体返回数组...例如
然后,您可以使用该服务并通过以下方式获取强类型列表:
上面的其他解决方案也可以工作,但我喜欢获取强类型列表而不是Object [] .
对我来说这很有效
Object是您想要的类
经过多次测试,这是我找到的最佳方式:)
你需要的一切
我最大的问题是构建将RestTemplate与兼容类匹配所需的Object结构 . 幸运的是我发现http://www.jsonschema2pojo.org/(在浏览器中获取JSON响应并将其用作输入)我不能推荐这个!
如果你更喜欢一个对象列表,一种方法是这样的:
并像这样使用它:
上述说明可在此处找到(https://www.baeldung.com/spring-rest-template-list),并在下面解释 .
“上面的代码中发生了一些事情 . 首先,我们使用ResponseEntity作为返回类型,使用它来包装我们真正想要的对象列表 . 其次,我们调用RestTemplate.exchange()而不是getForObject() .
这是使用RestTemplate的最通用方法 . 它要求我们指定HTTP方法,可选的请求主体和响应类型 . 在这种情况下,我们使用ParameterizedTypeReference的匿名子类作为响应类型 .
最后一部分是允许我们将JSON响应转换为适当类型的对象列表 . 当我们创建ParameterizedTypeReference的匿名子类时,它使用反射来捕获有关我们要将响应转换为的类类型的信息 .
它使用Java的Type对象来保存这些信息,我们不再需要担心类型擦除 . “
考虑看看这个答案,特别是如果你想在
List
Spring RestTemplate and generic types ParameterizedTypeReference collections like List<T>中使用泛型我实际上为我的一个项目开发了一些功能,这里是代码:
我希望这会对某人有所帮助!
您可以为每个条目创建POJO,例如:
然后使用BitPay列表的ParameterizedTypeReference,您可以使用:
我找到了这篇文章的工作https://jira.spring.io/browse/SPR-8263 .
根据这篇文章,你可以返回一个这样的打字列表: