sol*_*4me 3 java spring spring-integration java-8 spring-boot
我正在使用Spring启动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;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出ClassCastExcpetion(无法将java.util.Optional强制转换为Foo)的原因是因为payload而不是包含foo值包含另一个可选对象,而Optional对象包含foo为value.
我已经在这里提到了这个
现在,Spring Integration始终处理Java 8的Optional类型.
我甚至尝试过使用文档中提到的框架的确切版本但没有成功
解决方法:我尝试创建一些包含有效负载的Wrapper(PayloadWrapper)对象,它可以工作.但可能还有其他一些方法吗?
我认为文件不清楚.问题是spring可以将方法参数转换为Optional<Type>,但在这种情况下,你的参数已经是一个Optional,所以Spring再次包装它.
如果你让你的transform方法只返回Foo(没有Optional),那么Spring将把一个Foo实例(或'null')包装成一个Optional传递给它的时候ServiceActivator
| 归档时间: |
|
| 查看次数: |
410 次 |
| 最近记录: |