我有一个类Outcome
,其中一个字段是Schema
. 但是因为后者可能为 null,所以我定义了Outcome
'sgetSchema()
以返回包装在 Vavr's 中的值Option
。在我的 Spring Boot 2 应用程序中,处理更新Outcome
s 的控制器方法有一个 parameter @Valid Outcome outcome
。但是,当尝试从表单数据填充此参数时,Spring 的转换服务会标记以下错误:
无法将类型“java.lang.String”的值转换为属性“模式”所需的类型“io.vavr.control.Option”:找不到匹配的编辑器或转换策略
也就是说,它无法将诸如“1234”之类的字符串标识符映射到Schema
具有该标识符的现有实例,Long
然后将Outcome
实例的schema
字段设置为该标识符。尽管事实上在我的WebMvcConfigurer
课堂上我已经添加到 Spring 的转换服务 Spring Data'sQueryExecutionConverters
中,声称可以处理转换 Vavr Optional
:
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.support.ConfigurableConversionService;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.data.repository.util.QueryExecutionConverters;
...
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean(name="conversionService")
public ConversionService getConversionService() {
ConfigurableConversionService conversionService = new DefaultConversionService();
QueryExecutionConverters.registerConvertersIn(conversionService);
System.out.println("Registered QueryExecutionConverters");
return conversionService;
}
...
如果我将Outcome
'sgetSchema()
改为返回 Java 8's ,则为传递给我的控制器方法的实例成功设置Optional<Schema>
了模式字段。Outcome