0

我有一个类Outcome,其中一个字段是Schema. 但是因为后者可能为 null,所以我定义了Outcome'sgetSchema()以返回包装在 Vavr's 中的值Option。在我的 Spring Boot 2 应用程序中,处理更新Outcomes 的控制器方法有一个 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

4

0 回答 0