项目中的技术
Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1
作为我的Spring Integration项目的一部分(具有inbound-http-gateway的REST API,它接受XML输入并产生XML输出),我正在编写以下组件:
POJO类的草稿(实际上,POJO将具有更多属性,但在我们的示例中,将其简化):
public class Composite {
private Boolean isError;
private Composite(CompositeBuilder compositeBuilder) {
this.isError = miCompositeBuilder.isError;
}
public boolean isError() {
return isError;
}
//Builder
public static class CompositeBuilder {
private Boolean isError;
public CompositeBuilder(Boolean isError) {
this.isError = isError;
}
public Composite build() {
return new Composite(this);
}
}
}
XML中的验证器服务激活器组件:
<!-- SERVICE ACTIVATOR FOR REQUEST VALIDATION -->
<int:service-activator ref="myService"
method="validateMYRequest"
input-channel="myGatewayRequests"
output-channel="compositesPostRequestValidation" />
XML中的路由器组件:
<!-- ROUTER POST-REQUEST VALIDATION -->
<int:router input-channel="compositesPostRequestValidation" expression="payload.isError">
<int:mapping value="true" channel="upstreamResponses"/>
<int:mapping value="false" channel="downstreamValidatedRequests"/>
</int:router>
最后在这个“路由器”中问我一个问题,
问题1) SpEL表达式(payload.isError)似乎有问题,因为在路由器调用期间出现了如下异常:
org.springframework.expression.spel.SpelEvaluationException:EL1008E:在类型为“ com.amb.restSample.core.model.Composite”的对象上找不到属性或字段“ isError”-可能不公开或无效? 在org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:217)〜[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE] ... ...
能否请您告诉我如何访问Composite POJO中的布尔“ isError”属性?假设发送到路由器的消息是消息
答案 0 :(得分:1)
看起来支付宝是MIComposite
而不是Composite
。
在任何情况下,SpEL都使用JavaBean约定。因此isError()
是布尔属性error
的获取者。因此payload.error
应该可以工作(只要MIComposite
公开它即可)。或者,您可以使用payload.isError()
。
如果在标题中,则表达式为headers['myHeader']
。