Spring Data Neo4j:ConversionFailedException:无法从类型java.lang.String转换为type为byte类型

时间:2015-02-02 09:53:59

标签: java spring spring-data-neo4j

我尝试使用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

你有任何线索吗?

感谢您的帮助。

1 个答案:

答案 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