In my project, I provide neo4j extentions to clients which send json string to extention while jackson auto parse the json string to my POJO Model. Howerver, I want to simply the json string sent by client .
The POJO Model class likes
@NodeEntity @XmlRootElement @JsonAutoDetect @JsonIgnoreProperties(ignoreUnknown = true) public class Task { @GraphId private Long nodeId; @Indexed(unique = true) private String taskId; @Indexed(indexType = IndexType.FULLTEXT, indexName = "TaskTile") private String title; @Indexed(indexType = IndexType.FULLTEXT, indexName = "TaskDescription") private String description; // Date startTime; // Date endTime; @Indexed private int startDate; @Indexed private int startTime; @Indexed private int endDate; @Indexed private int endTime; ---
The startDate, startTime,endDate,endTime adopted to search. I dont' want client to explict send these fields in json strings but send by two Date string likes yyyy-MM-dd HH:mm:ss or Unix time 172399299999.
The valueble hints are
http://wiki.fasterxml.com/JacksonHowToCustomDeserializers
http://magicmonster.com/kb/prg/java/spring/webmvc/jackson_custom.html
http://www.baeldung.com/jackson-deserialization
I did it by some post advices. But When I send some post, Neo4j Jersey actually doesn't use jackson to parse the string.
I tried everything I could. Finally, I tried it out.
In pom.xml, We add
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.2.1</version> </dependency>
In Model , We delete
@XmlRootElement
and Change Json related annotations to
com.fasterxml.jackson.databind.annotation.*
not
org.codehaus.jackson.annotate.*
And The final Modle class is
import org.springframework.data.neo4j.annotation.GraphId; import org.springframework.data.neo4j.annotation.Indexed; import org.springframework.data.neo4j.annotation.Labels; import org.springframework.data.neo4j.annotation.NodeEntity; import org.springframework.data.neo4j.support.index.IndexType; import com.fadeinfadeout.common.TaskDeserializer; import com.fadeinfadeout.common.TaskPayOption; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @NodeEntity @JsonDeserialize(using = TaskDeserializer.class ) public class Task { @GraphId private Long nodeId; @Indexed(unique = true) private String taskId;
The TaskDeserializer class is
package com.fadeinfadeout.common; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Logger; import com.fadeinfadeout.modle.Task; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.TextNode; public class TaskDeserializer extends JsonDeserializer<Task> { private static DateFormat dateFormator = new SimpleDateFormat("yyyyMMdd"); private static DateFormat timeFormator = new SimpleDateFormat("HHmmss"); private static final Logger logger = Logger.getLogger(TaskDeserializer.class.getName()); @Override public Task deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException { JsonNode node = jp.getCodec().readTree(jp); String taskId = ((TextNode) node.get("taskId")).textValue(); String title = ((TextNode) node.get("title")).textValue(); String description = ((TextNode) node.get("description")).textValue(); String startTimeStr = ((TextNode) node.get("start")).textValue(); // unix time String endTimeStr = ((TextNode) node.get("end")).textValue(); if (startTimeStr != null & endTimeStr != null) { Date sdate = new Date(Long.valueOf(startTimeStr)); Date edate = new Date(Long.valueOf(endTimeStr)); int startDate = Integer.valueOf(dateFormator.format(sdate)); int startTime = Integer.valueOf(timeFormator.format(sdate)); int endDate = Integer.valueOf(dateFormator.format(edate)); int endTime = Integer.valueOf(timeFormator.format(edate)); return new Task(taskId, title, description, startDate, startTime, endDate, endTime); } return new Task(taskId, title, description); } }
When post a request with
curl -i -H 'content-type: application/json' -X POST -d '{"taskId":"3","title":"打炮","description":"约吗", "start":"1427965098585","end":"1427965598585"}' http://localhost:7474/fifo/task/addTask
The deserilizer result is correct
Due to the following posts, I could solve this problem.
http://www.4byte.cn/question/601051/unmanaged-extensions-taking-json-as-parameter.html
https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations
------------------------------------
The other coin of the above problem is custom serialize POJO Model to Json string
http://java.dzone.com/articles/how-serialize-javautildate
http://wiki.fasterxml.com/JacksonSampleDateHandling
References
https://jersey.java.net/nonav/documentation/latest/media.html
http://wiki.fasterxml.com/JacksonHowToCustomSerializers
http://magicmonster.com/kb/prg/java/spring/webmvc/jackson_custom.html
http://wiki.fasterxml.com/JacksonHome
http://wiki.fasterxml.com/JacksonSampleSimplePojoMapper
相关推荐
Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...
Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...
电影示例应用 如何一起使用Spring Boot,Spring Data和Neo4j。 Spring Data Neo4j可以在基于Spring的应用程序中方便地集成Neo4j。 它提供了对象图映射(OGM)功能以及Spring Data项目共有的其他功能。 笔记该项目...
该驱动程序支持各种类型的数据库传输: 通过使用jdbc:neo4j:bolt://<host>:<port>/的Bolt协议(3.0.x至3.2.x) 通过使用jdbc:neo4j:http://<host>:<port>/的HTTP协议(2.x +) 展望未来,还将支持: 直接文件连接...
connections = { default : 'restful-neo4j' , restful - neo4j : { module : 'sails-restful-neo4j' , type : 'json' , // expected response type (json | string | http) host : 'foo.myneo4j.com' , //
Neo4j Vue安装步骤克隆或下载该库到本地下载neo4j并安装到本地,启动neo4j服务进入到该工程的根目录,输入命令:npm run update进行npm包的导入使用命令:npm run dev启动该工程默认端口是:8081 neo4j账号信息: ...
DR $ docker run --name neo4j bitnami/neo4j:latestDocker撰写$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-neo4j/master/docker-compose.yml > docker-compose.yml$ docker-compose up...
**Neo4J社区版3.5.12 Windows安装与使用指南** Neo4J是一款流行的图数据库管理系统,尤其适用于处理复杂关系数据。图数据库利用图形结构来存储和查询数据,其核心理念是节点、边(关系)和属性,这使得在处理网络、...
imap2neo4j: imap2neo4j imapServer imapUsername imapPassword imapMailbox neo4jServer [neo4jUsername] [neo4jPassword] [paging, eg import by batches of 1000] [specific range of messages, eg 50
通过在 conf/neo4j-server.properties 中添加一行来配置 Neo4j: org.neo4j.server.thirdparty_jaxrs_classes=org.neo4j.example.unmanagedextension=/example 启动 Neo4j 服务器。 写评论 curl ...
Sublime Text 2/3 插件:Neo4j Sublime 是最好的跨平台编辑器之一,所以我想为什么不创建一个简单的 Neo4j 插件呢?... 编辑用户名和密码(默认为neo4j:neo) 结果显示在控制台中(Ctrl+~)打开C
egg-neo4j Neo4j用于鸡蛋框架。安装$ npm i egg-neo4j --save用法// {app_root}/config/plugin.jsexports . neo4j = { enable : true , package : 'egg-neo4j' ,} ;配置// {app_root}/config/config.default....
**Node.js on Neo4j: 在图形数据库上构建应用** 标题中的"nodejs-on-neo4j"指的是一项使用Node.js与Neo4j图形数据库交互的实践项目。这个项目通常涉及利用Node.js的灵活性和Neo4j的强大图数据处理能力来开发应用...
schemaless-graphql-neo4j 将无类型的动态GraphQL查询转换为Cypher。 签出,以更好地查看您可以编写的查询。入门$ npm install schemaless-graphql-neo4j :warning: 图书馆尚未发布操场您可以开始使用开发人员游乐场...
'Neo4j' => Neo4j\OGM\Facades\Neo4j::class, ], ``` 5. **配置服务**:在`app/Providers/AppServiceProvider.php`的`boot`方法中加载配置文件和启动Neo4j客户端: ```php public function boot() { $this->app->...
This book will take you from the installation of Neo4j through to building a full application with Neo4j at its heart, and everything in between. Using this book, you'll get everything up and ...
【标题】"neo4j:所有人的图表"指的是开源图数据库管理系统Neo4j,它将数据以图形结构的形式存储和处理,便于理解复杂的关系。在信息化时代,数据之间的关联性日益增强,图数据库如Neo4j应运而生,成为理解和分析...
为什么这个 ? 您可能需要对您的linkedin 网络进行分析/监控。 我个人使用它来更好地可视化我的网络并对其进行一些数据分析。如何使用您必须通过在其中创建应用程序来设置您的 linkedin API 密钥 git clone ...
标题中的“spring-graph-neo4j:Neo4j的春天”暗示了我们将探讨Spring框架与图数据库Neo4j的结合使用。在Java开发领域,Spring框架是一个广泛使用的开源框架,它提供了一整套用于构建企业级应用的服务和工具。而Neo4j...
Neo4j Neo4j 是一个高度可扩展、健壮(完全 ACID)的原生图形数据库。 Neo4j 被全球数以千计的领先企业、初创公司、企业和政府用于任务关键型应用程序。 使用存储库上的 Dockerfile,您就可以使用 docker neo4j ...