【发布时间】:2015-05-06 01:51:31
【问题描述】:
我正在使用 Spring boot 1.2.2.Release 和 Java 8,问题是 Spring 将 Optional payload 包装到新的 Optional 对象中的次数与我通过 transformer/service activator 传递的次数一样多。例如
@ServiceActivator(inputChannel = ..., outputChannel = ...)
public Optional<Foo> transform() {returns -> Optional.of(foo);}
@ServiceActivator(inputChannel = ..., outputChannel = ...)
public Optional<Foo> doSomething1(Optional<Foo> payload) {
payload.ifPresent(f -> {System.out.println(f.getId());}); // this line throws ClassCastException
return foo;
}
上面代码抛出 ClassCastExcpetion(cannot cast java.util.Optional to Foo) 的原因是因为 payload 而不是包含 foo 作为值包含另一个 Optional 对象,而该 Optional 对象包含 foo 作为值。
我读过this 提到的地方
现在 Spring Integration 始终如一地处理 Java 8 的 Optional 输入。
我什至尝试使用文档中提到的框架的确切版本,但没有成功
解决方法:我尝试创建一些包含有效负载的 Wrapper(PayloadWrapper) 对象并且它可以工作。但可能还有其他方法吗?
【问题讨论】:
标签: java spring java-8 spring-boot spring-integration