我使用Spring 1.2.2.释放和Java8,问题是Spring将Optional payload
封装到新的可选对象中的次数与我通过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的原因(不能将java.util.Optional转换为Foo),因为payload
而不是包含foo
作为值包含另一个可选对象,而该可选对象包含foo
作为值。
我读过这上面提到的
现在Spring一致地处理Java 8的可选类型。
我甚至尝试使用文档中提到的框架的确切版本,但没有成功。
解决方案:我尝试创建包含有效负载的包装器(PayloadWrapper)对象,并且它可以工作。但也许还有别的办法吗?
发布于 2015-03-04 21:35:58
我想文件还不清楚。问题是spring可以将方法参数转换为Optional<Type>
,但在本例中,您的参数已经是Optional
,所以Spring再次包装它。
如果使转换方法只返回Foo
(没有Optional
),那么当Optional
传递给ServiceActivator
时,Spring将在Optional
中包装Foo实例(或'null')
https://stackoverflow.com/questions/28865232
复制相似问题