neo4j节点中的序列化属性

时间:2014-10-08 11:11:27

标签: json serialization neo4j

我需要在使用Java的neo4j中将序列化对象作为节点属性(字符串类型),我能够应用一些转换器/序列化器吗?

我知道.NET neo客户端有类似JsonConverter

的东西

1 个答案:

答案 0 :(得分:2)

如果您正在使用SDN(并且通过代理我假设Spring框架的其余部分)那么这对您来说非常容易。首先,您应该为您的Property创建一个转换器,将数据转换为String(参见Spring documentation的第7.5节):

import org.springframework.core.convert.converter.Converter

public class YourPropertyTypeToStringConverter 
     implements Converter<YourPropertyType, String> {

     @Override
     public String convert(final YourPropertyType source) {
         //some code that takes your object and returns a String
     }
}

另一个将其转换回来:

public class StringToYourPropertyTypeConverter 
     implements Converter<String, YourPropertyType> {

     @Override
     public YourPropertyType convert(final String source) {
         //some code that takes a String and returns an object of your type
     }
}

然后,您应该通过添加一些配置来启用Spring Framework转换:

<bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="your.package.YourPropertyTypeToStringConverter"/>
            <bean class="your.package.StringToYourPropertyTypeConverter"/>
        </set>
    </property>
</bean>

在@NodeEntity带注释的类中,您可以向需要在表单中进行转换的字段添加@GraphProperty注释:

@GraphProperty(propertyType = String.class)

现在你的转换器可以做任何你喜欢的事情,只要你可以双向转换,但你专门询问了JSON,所以使用Jackson这是一个简单的例子。

在项目中加入杰克逊:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.3.3</version>
</dependency>

要从类转换为字符串:

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(yourObject);

又回来了:

YourPropertyType deserialised = mapper.readValue(json, YourPropertyType.class);

显然你可以配置很多,GitHub上有一些文档。