我遇到了与链接中提到的相同的问题: Mongo spring-data issue with java.util.Currency 我试过接受的答案。但其没有工作,我在行获得NullPointerException异常:java.util.currency发布spring-data-mongodb问题
new CustomConversions(Arrays.asList(currencyToString, stringToCurrency));
所以我定义的新类转换器,像这样:
@Component
public class CurrencyToStringConverter implements Converter<Currency,String>{
/* (non-Javadoc)
* @see com.fasterxml.jackson.databind.util.Converter#convert(java.lang.Object)
*/
@Override
public String convert(Currency arg0) {
System.out.println("***INSIDE CurrencyToStringConverter***"+arg0);
return arg0.getCurrencyCode();
}
}
和
@Component
public class StringToCurrencyConverter implements Converter<String,Currency>{
/* (non-Javadoc)
* @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object)
*/
@Override
public Currency convert(String arg0) {
System.out.println("***INSIDE StringToCurrencyConverter***"+arg0);
return Currency.getInstance(arg0);
}
}
我用他们在“customConversions()”中显示如下:
@Configuration
public class CustomMongoConfiguration extends AbstractMongoConfiguration {
@Autowired
private Environment env;
@Bean
@Override
public CustomConversions customConversions() {
System.out.println("***CUSTOM MONGO CONVERSIONS***");
List<Converter<?,?>> converters=new ArrayList<>();
converters.add(new CurrencyToStringConverter());
converters.add(new StringToCurrencyConverter());
return new CustomConversions(converters);
}
/* (non-Javadoc)
* @see org.springframework.data.mongodb.config.AbstractMongoConfiguration#getDatabaseName()
*/
@Override
protected String getDatabaseName() {
// TODO Auto-generated method stub
String prop = env.getProperty("spring.data.mongodb.database");
System.out.println("database naem:: "+prop);
return prop;
}
/* (non-Javadoc)
* @see org.springframework.data.mongodb.config.AbstractMongoConfiguration#mongo()
*/
@Override
@Bean
public Mongo mongo() throws Exception {
String prop = env.getProperty("spring.data.mongodb.host");
System.out.println("host naem:: "+prop);
return new MongoClient(prop);
}
}
当春天启动应用程序启动时,我可以看到下面印statments:
System.out.println("***CUSTOM MONGO CONVERSIONS***");
System.out.println("database naem:: "+prop);
System.out.println("host naem:: "+prop);
但是,当我试图从MongoDB中我的对象,它从来没有所谓的“转换”,在转换班组长方法,而且,我始终得到此异常:
org.springframework.data.mapping.model.MappingException: No property null found on entity class java.util.Currency to bind constructor parameter to!
at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74)
at org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:63)
at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:71)
at org.springframework.data.convert.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:83)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:251)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1186)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access$200(MappingMongoConverter.java:78)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1134)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:870)
我跟着这个链接也:
Spring not using mongo custom converters
按照链接中的建议,我将@Configuration注释更改为类中的@Component,CustomMongoConfiguration
。但它也不起作用。如果我使用@Component注释,下面的语句会多次打印。我不知道原因。
System.out.println("***CUSTOM MONGO CONVERSIONS***");
System.out.println("database naem:: "+prop);
System.out.println("host naem:: "+prop);
我使用的是spring-boot版本1.3.2.RELEASE。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
顺便说一句,我使用的application.properties
配置MongoDB的特性,但没有任何基于Java的配置:
spring.data.mongodb.host=localhost
spring.data.mongodb.password=
spring.data.mongodb.port=27017
spring.data.mongodb.repositories.enabled=true
spring.data.mongodb.database=abcde
我竭力要解决这个过去三天。任何人都可以请帮助我。
没有。它不工作。获取相同的错误org.springframework.data.mapping.model.MappingException:在实体类java.util.Currency上找不到属性null,以将构造函数参数绑定到! at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74) ' – kaluva
我有疑问。我是否需要在代码中的任何位置调用Converter的“convert”方法。我在想,这些会自动调用。如我错了请纠正我? – kaluva