在 spring 集成中强制使用 java 类型是否需要任何其他属性
Is any additional attributes required to force the java type in spring integration
我们正在使用 spring-集成(基于 xml 的配置),其中我们正在执行以下步骤
- 将负载(java-对象)转换为json
- 剩下的api打电话
- 转换回 java-object
<int:object-to-json-transformer content-type="test.Request" input-channel="objectToJsonChannel" output-channel="apiChannel"/>
<int-http:outbound-gateway id="apiChannel"
request-channel="apiChannel"
reply-channel="jsonToObjectChannel"
....
/>
<int:json-to-object-transformer type="test.Response" input-channel="jsonToObjectChannel" output-channel="responseChannel"/>
以上代码适用于 spring-集成版本 5.1。当我升级到 5.2.它开始抛出异常
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [test.Request] to type [test.Response]
。
我注意到 object-to-json-transformer
在页眉上添加了 class 关键字 json__TypeId__
。然后它将 class 类型用于 json-to-object-transformer
。
但是json-to-object-transformer
中提到的类型属性如果提到应该使用。
请提出解决这个问题的建议,或者它真的是 spring 集成 (5.2) 的错误。
考虑在调用 REST 服务之前添加 <header-filter header-names="json_*" />
。 <int:object-to-json-transformer>
填充 JsonHeaders
让下游知道我们在有效负载中 curry 的 JSON 的真实类型。
A <int:json-to-object-transformer>
更喜欢那些 header 而不是静态 type
选项。
但是由于 payload
已经是与那些请求 header 不同的表示,所以它做了错误的事情。
我会建议 <int:json-to-object-transformer>
上的一个选项来做出偏好,但这并不完全合乎逻辑。由于我们已经更改了一个有效负载,因此最好更改其各自的 headers。否则我们就是在自欺欺人。
另一方面,HTTP 出站网关可以负责将请求转换为 JSON 网络请求,然后从 JSON 响应返回到某些 POJO 类型。
参见 https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/http.html#http-outbound 及其 expected-response-type
。只要 contentType
header 是 application/json
,你最好避免那些 <int:object-to-json-transformer>
& <int:json-to-object-transformer>
.
我们正在使用 spring-集成(基于 xml 的配置),其中我们正在执行以下步骤
- 将负载(java-对象)转换为json
- 剩下的api打电话
- 转换回 java-object
<int:object-to-json-transformer content-type="test.Request" input-channel="objectToJsonChannel" output-channel="apiChannel"/>
<int-http:outbound-gateway id="apiChannel"
request-channel="apiChannel"
reply-channel="jsonToObjectChannel"
....
/>
<int:json-to-object-transformer type="test.Response" input-channel="jsonToObjectChannel" output-channel="responseChannel"/>
以上代码适用于 spring-集成版本 5.1。当我升级到 5.2.它开始抛出异常
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [test.Request] to type [test.Response]
。
我注意到 object-to-json-transformer
在页眉上添加了 class 关键字 json__TypeId__
。然后它将 class 类型用于 json-to-object-transformer
。
但是json-to-object-transformer
中提到的类型属性如果提到应该使用。
请提出解决这个问题的建议,或者它真的是 spring 集成 (5.2) 的错误。
考虑在调用 REST 服务之前添加 <header-filter header-names="json_*" />
。 <int:object-to-json-transformer>
填充 JsonHeaders
让下游知道我们在有效负载中 curry 的 JSON 的真实类型。
A <int:json-to-object-transformer>
更喜欢那些 header 而不是静态 type
选项。
但是由于 payload
已经是与那些请求 header 不同的表示,所以它做了错误的事情。
我会建议 <int:json-to-object-transformer>
上的一个选项来做出偏好,但这并不完全合乎逻辑。由于我们已经更改了一个有效负载,因此最好更改其各自的 headers。否则我们就是在自欺欺人。
另一方面,HTTP 出站网关可以负责将请求转换为 JSON 网络请求,然后从 JSON 响应返回到某些 POJO 类型。
参见 https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/http.html#http-outbound 及其 expected-response-type
。只要 contentType
header 是 application/json
,你最好避免那些 <int:object-to-json-transformer>
& <int:json-to-object-transformer>
.