我正在尝试将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
我想知道我在这里做错什么了吗?
最佳答案
DomainClassConverter
应该声明为bean(因为它是ApplicationContextAware
),并且它会自动在ConversionService
中注册自己,因此您无需手动注册它:
@Bean @Autowired
public DomainClassConverter domainClassConverter(ConversionService cs) {
return new DomainClassConverter(cs);
}