我需要在使用Java的neo4j中将序列化对象作为节点属性(字符串类型),我能够应用一些转换器/序列化器吗?
我知道.NET neo客户端有类似JsonConverter
的东西答案 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上有一些文档。