gpt4 book ai didi

java - 通用类型和 HTTP 出站网关结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:48 25 4
gpt4 key购买 nike

因此,我有一个 http 出站网关,它调用一个返回 JSON 数组的给定 RESTful 端点。

<int-http:outbound-gateway id="shipments"
http-method="GET"
expected-response-type="java.util.List"
url="http://codeserver.net/shipments?order={orderId}">

<int-http:uri-variable name="orderId" expression="payload.
</int-http:outbound-gateway>

如您所见,我为预期结果的类型指定了一个原始类型。底层 GSON 转换器(Jackson 做同样的事情)最终返回一个 map 列表。我想弄清楚的是是否有一种方法可以指定集合中泛型类型的性质。

我一直无法弄清楚如何指定 ParameterizedTypeReference底层RestTemplate可以使用,以便返回的列表对象的类型为 List<Shipment>而不是现在将其映射到 List<Map<String,Object>> .

这里似乎没有办法处理泛型。

有趣的是 json-to-object-transformer似乎遇到了同样的问题。

有谁知道在与 HTTP 网关进行这种类型的集成时如何处理泛型类型,或者我是否必须为如此基本的事情编写自己的转换器?

最佳答案

您指出了正确的 JIRA 票证。从我们的测试来看,它看起来像:

expected-response-type-expression="T (org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandlerTests).testParameterizedTypeReference()"

它引用此方法的地方:

public static ParameterizedTypeReference<List<String>> testParameterizedTypeReference() {
return new ParameterizedTypeReference<List<String>>() {};
}

当然它可以是任何具有ParameterizedTypeReference 类型的static 字段。

从另一边,您可以将 ParameterizedTypeReference 的所需值填充到之前的 header 中,并将其用作:

expected-response-type-expression="headers.expectedResponseType"

您甚至可以拥有一些 bean,它可以根据 requestMessage 从其某些方法返回适当的类型。

JsonToObjectTransformer 可以做类似的事情,但结果取决于 JSON 引擎。有 JsonHeaders,当没有提供 target-class 值时,JsonToObjectTransformer 会得到处理。

更新

正如您所注意到的,当我们无法指定通用类型甚至无法从 SpEL 中获取内联实现时,我们会受到 XML 定义的限制:

new ParameterizedTypeReference<List<Shipment>>() {}

在 SpEL 中根本不起作用。

我看到了使用内联脚本的 XML 定义的解决方法,例如 Groovy:

<int:header-enricher>
<int:header name="expectedResponseType">
<int-groovy:script>
<![CDATA[
new ParameterizedTypeReference<List<com.my.proj.domain.Shipment>>() {}
]]>
</int-groovy:script>
</int:header>
</int:header-enricher>

关于java - 通用类型和 HTTP 出站网关结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26005981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com