Spring Data DomainClassConverter无法正常工作(与Java Config结合使用)

时间:2012-09-14 09:15:26

标签: spring spring-mvc spring-data spring-data-jpa

我正在尝试设置Spring Data / JPA DomainClassConverter以自动将(String)id转换为域类本身。

我的项目是使用Java Config(所以没有xml)。

我的WebConfig目前有:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new DomainClassConverter<DefaultFormattingConversionService>((DefaultFormattingConversionService) registry));
    }
}

这似乎成功地连接了DomainClassConverter,因为我在打印时可以在转换服务中看到它:

ConversionService converters =
  ..<default converters>..
  org.springframework.data.repository.support.DomainClassConverter@6ea4ce0d, org.springframework.core.convert.support.IdToEntityConverter@5d3f03b, org.springframework.core.convert.support.ObjectToObjectConverter@1d40b47a

但是在提交嵌套表单(客户参考订单)时,客户不会自动转换,因此我得到了:

Failed to convert property value of type java.lang.String to required type org.mycomp.domain.Customer for property customer; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.mycomp.domain.Customer] for property customer: no matching editors or conversion strategy found

我想知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:7)

DomainClassConverter应声明为bean(因为它是ApplicationContextAware),并且它会自动在ConversionService中注册,因此您无需手动注册:

@Bean @Autowired
public DomainClassConverter domainClassConverter(ConversionService cs) {
    return new DomainClassConverter(cs);
}

答案 1 :(得分:-1)

异常告诉您需要自定义转换器将String转换为Customer。您必须将输入标记化并将其映射到Customer字段。对于所有域类都是如此。

谷歌搜索也引导我进入Spring论坛的一个主题:

http://forum.springsource.org/showthread.php?122944-Help-with-DomainClassConverter-configuration

它表明可能存在错误,具体取决于您使用的是哪个版本的Spring。