gpt4 book ai didi

java - Spring 集成注释 Java 8 可选的不正确处理

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:17 27 4
gpt4 key购买 nike

我正在使用 Spring boot 1.2.2.Release 和 Java 8,问题是 Spring 将 Optional payload 包装到新的 Optional 对象中的次数与我通过 transformer 传递它的次数一样多/服务激活器。例如

@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 作为值。

我已阅读 this它提到的地方

Now Spring Integration consistently handles the Java 8's Optional type.

我什至尝试使用文档中提到的框架的确切版本,但没有成功

解决方法:我尝试创建一些包含有效负载的 Wrapper(PayloadWrapper) 对象并且它有效。但可能还有其他方法吗?

最佳答案

我认为文档不清楚。问题是spring可以将方法参数转化为Optional<Type> ,但在这种情况下,您的参数已经是 Optional , 所以 Spring 再次包装它..

如果您使转换方法只返回 Foo (没有 Optional ),然后 Spring 将在 Optional 中包装一个 Foo 实例(或'null')当它传递给 ServiceActivator

关于java - Spring 集成注释 Java 8 可选的不正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com