我尝试使用Spring Data Neo4j将图像存储为字节数组(byte []),并具有以下模型属性:
@GraphProperty(propertyType = byte[].class)
private byte[] profileImage;
保存和阅读不起作用:
modelRepository.save(myObject)
myModel = modelRepository.findByNodeId(nodeId)
我收到以下转化例外情况:
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type byte for value ...
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41) ~[spring-core-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174) ~[spring-core-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.core.convert.support.StringToArrayConverter.convert(StringToArrayConverter.java:63) ~[spring-core-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35) ~[spring-core-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174) ~[spring-core-4.0.7.RELEASE.jar:4.0.7.RELEASE]
Caused by: java.lang.NumberFormatException: For input string: ...
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.7.0_75]
at java.lang.Integer.parseInt(Integer.java:492) ~[na:1.7.0_75]
at java.lang.Byte.parseByte(Byte.java:148) ~[na:1.7.0_75]
at java.lang.Byte.valueOf(Byte.java:204) ~[na:1.7.0_75]
at java.lang.Byte.valueOf(Byte.java:230) ~[na:1.7.0_75]
似乎在某种程度上,byte []首先在内部转换为String然后再转换回byte [] ......
我不明白到底发生了什么。
作为一个连接类,我在Spring app config xml文件中使用了这个:
org.springframework.data.neo4j.rest.SpringRestGraphDatabase
你有任何线索吗?
感谢您的帮助。
答案 0 :(得分:1)
经过一些调查后,我可以通过提供自定义转换器来解决问题:
public class StringBase64ToByteArrayConverter implements Converter<String, byte[]> {
@Override
public byte[] convert(String source) {
return Base64.decodeBase64(source);
}
}
并使用此转换器注册ConversionService:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="my.converter.StringBase64ToByteArrayConverter"/>
</set>
</property>
</bean>
另见Spring Reference:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#core-convert