![](/img/trans.png)
[英]“No mapper registered for java.util.Optional” using JDBI v2 and java.util.Optional
[英]How to configure Java 8 java.util.Optional using Spring 4 xml
我正在尝试使用Spring XML配置使用工厂方法Optional.of
的java.land.Optional对象。 但是我一直收到错误消息。 我正在使用Spring 4和Java 8。
<bean id="eventMapping" class="com.betfair.service.sogei.sem.dto.EventMapping">
<constructor-arg name="sogTeam1Id" ref="sogTeam1Id"/>
</bean>
<bean id="sogTeam1Id" class="java.util.Optional" factory-method="of">
<constructor-arg type="java.lang.Object" ref="team1Id"/>
</bean>
<bean id="team1Id" class="java.lang.Long">
<constructor-arg value="1000"/>
</bean>
当我尝试运行测试时,在spring尝试创建bean时出现异常:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventMapping' defined in class path resource [test-data-provider.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Optional]: Could not convert constructor argument value of type [java.lang.Long] to required type [java.util.Optional]: Failed to convert value of type [java.lang.Long] to required type [java.util.Optional]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.Long] to required type [java.util.Optional]: no matching editors or conversion strategy found
我也尝试过:
<bean id="sogTeam1Id" class="java.util.Optional" factory-method="of">
<constructor-arg type="java.lang.Object" value="1000"/>
</bean>
在这种情况下,我会收到以下(类似)错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'updateEventDatePayload' defined in class path resource [test-data-provider.xml]: Cannot resolve reference to bean 'eventMapping' while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventMapping' defined in class path resource [test-data-provider.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Optional]: Could not convert constructor argument value of type [java.lang.String] to required type [java.util.Optional]: Failed to convert value of type [java.lang.String] to required type [java.util.Optional]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Optional]: no matching editors or conversion strategy found
这些错误说明无法将对象Long转换为对象Optional,但是有问题的方法是这样的:
public static <T> Optional<T> of(T var0);
我想要一个包含一个Long值的Optional对象。
有没有人遇到过这个问题,请提供一些见解? 谢谢!
您在配置“ eventMapping” bean时遇到问题。 您已在此处指定对“ team1Id”的引用,而不是“ Team1Id”。 您配置中的“ team1Id”类型为Long,因此它应该失败。 仅“ Team1Id”具有可选类型。 因此,您应该使用对此bean的引用。
通常,我建议避免使用几乎相同的bean来防止此类冲突。
所以最后,如果有人遇到同样的问题,这就是我使之工作的方式。 通过Spring表达语言。
<constructor-arg name="eventMapping" value="#{ T(java.util.Optional).of( 1)}"/>
使用factory-method =“ of”策略无法使其正常工作。
如上所述,使用Java配置更容易做到这一点,但是在这种情况下,我不得不使用xml config。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.