【发布时间】:2016-04-05 10:03:49
【问题描述】:
我需要使用 Spring RestTemplate 向具有表示为 JSON 的查询参数的 HTTP 端点发出请求。
restTemplate.getForObject(
apiRoot + "/path" + "?object={myObject}",
Response.class,
new MyObject())
在这里,我需要将 MyObject 转换为 JSON(显然是 URL 编码的)。但是RestTemplate 只是将其转换为String 并使用toString 调用。 MyObject 可以由 Jackson 转换为 JSON。 UriComponentsBuilder 的行为方式相同:
UriComponentsBuilder.fromHttpUrl(apiRoot)
.path("/path")
.queryParam("object", new MyObject()))
.queryParam("access_token", accessToken)
.toUri()
有没有办法避免用手打电话给ObjectMapper.writeValueAsString?
更新:澄清一下,在给定MyObject 的情况下,我需要在我的URI(或URL 编码形式?object=%7B%22key%22%3A42%7D)中有?object={"key":42} 有一个属性key,其值等于42。
【问题讨论】:
-
如果合适的话,您可以在
MyObject.toString()中使用ObjectMapper.writeValueAsString。 -
我可以做到,但可能不会,原因有二。首先要让我的 DTO 独立于 Spring 上下文,因为我可能会在实际项目中通过上下文连接预配置的
ObjectMapper。第二,相当模糊的一个,我宁愿不引入将对象转换为 JSON 的替代路径,并在需要时直接调用ObjectMapper来保持明确。
标签: java json spring jackson resttemplate