提问人:Mauro Molinari 提问时间:10/19/2021 更新时间:10/19/2021 访问量:262
@Gateway(payloadExpression=“..”)与@Payload(“...”)
@Gateway(payloadExpression="..") vs @Payload("...")
问:
Spring 集成文档解释说,在不带参数的接口方法声明网关时,必须指定有效负载表达式,以便框架知道应该在生成的消息上设置什么有效负载。 但是,如果我执行以下操作:
<int:gateway id="myGateway"
service-interface="com.example.MyGateway"
default-request-channel="requestChannel"
default-reply-channel="replyChannel" />
对于以下接口:
package com.example;
public interface MyGateway {
@Gateway(payloadExpression = "''")
String doSomething();
}
这会导致错误:“不支持接收,因为没有配置可轮询的应答通道”。
相反,这起作用了:
public interface MyGateway {
@Payload("''")
String doSomething();
}
事实上,上述文档指定有效负载应使用 either 或 with 元素的属性指定。
但是,作为用户,我发现通过注释设置有效负载表达式在这里不起作用,这非常令人惊讶,尤其是因为相同的注释在其他上下文中也有效。@Payload
payload-expression
method
@Gateway
这是故意的还是疏忽的?
答:
0赞
Gary Russell
10/19/2021
#1
目前尚不清楚为什么文档令人困惑,但请随时提出改进建议。
注释用于在使用基于注释的配置时进行配置@Gateway
文档明确说明使用或使用 XML 配置时。@Payload
payload-expression
评论
1赞
Mauro Molinari
10/20/2021
我没有说文档令人困惑,我说过这种行为令人惊讶。我还有其他项目,在这些项目中,我使用上面的简单声明在XML中声明我的网关,然后我在该接口中注释多个方法,这工作得很好。当这样的接口只有一个方法时,似乎会出现问题,在这种情况下,可能只是被忽略,或者至少是它的值。将行为与转换器进行比较:在 XML 中声明转换器并用于指定哪个方法是完全可以的。@Gateway
@Gateway
payloadExpression
@Transformer
1赞
Gary Russell
10/20/2021
我明白你的意思 - 其他属性(例如 requestChannel)工作 - 它应该工作得太 github.com/spring-projects/spring-integration/issues/3648
评论