我是Vert.x的新手,尝试实现一个小型REST API,它将数据存储在本地文件系统的JSON文件中。编写在文件上执行CRUD操作的Verticles
到目前为止,我设法实现了REST API,因为Vertx在该部分有很好的文档。
我目前正在寻找的是如何在Vert.x中构建数据访问对象的示例。我如何实现可以在包含JSON的文本文件上执行crud操作的Verticle?
你能提供我任何例子吗?任何提示?
更新1:
通过在一个文件我想下面的CRUD操作。想象一下在路径/api/v1/user/:userid/records/
上有一个名为Records
的REST资源。
在我的Verticle启动我的HTTP服务器我有以下路线。
router.get('/api/user/:userid/records').handler(this.&handleGetRecords)
router.post('/api/user/:userid/records').handler(this.&handleNewRecord)
的处理程序方法handleGetRecords
和handleNewRecord
正在发送使用Vertx事件总线的消息。
request.bodyHandler({ b ->
def userid = request.getParam('userid')
logger.info "Reading record for user {}", userid
vertx.eventBus().send(GET_TIME_ENTRIES.name(), "read time records", [headers: [userId: userid]], { reply ->
// This handler will be called for every request
def response = routingContext.response()
if (reply.succeeded()) {
response.putHeader("content-type", "text/json")
// Write to the response and end it
response.end(reply.result().body())
} else {
logger.warn("Reply failed {}", reply.failed())
response.statusCode = 500
response.putHeader("content-type", "text/plain")
response.end('That did not work out well')
}
})
})
然后是另一个verticle消耗这些消息GET_TIME_ENTRIES
或CREATE_TIME_ENTRY
。我认为这个消费者Verticle是Records
的数据访问对象。该verticle可以读取包含所有用户记录的给定:userid
的文件。该verticle能够
- 添加一条记录
- 读取所有记录
- 读取特定记录
- 更新记录
- 删除一个或所有记录
这里是读取所有记录的示例。
vertx.eventBus().consumer(GET_TIME_ENTRIES.name(), { message ->
String userId = message.headers().get('userId')
String absPath = "${this.source}/${userId}.json" as String
vertx.fileSystem().readFile(absPath, { result ->
if (result.succeeded()) {
logger.info("About to read from user file {}", absPath)
def jsonObject = new JsonObject(result.result().toString())
message.reply(jsonObject.getJsonArray('records').toString())
} else {
logger.warn("User file {} does not exist", absPath)
message.fail(404, "user ${userId} does not exist")
}
})
})
我想要实现读取文件中像我上面没有和deserialise的JSON到一个POJO(例如List<Records>
)。使用Vertx的JsonObject
似乎更加方便。我不想操纵JsonObject实例。
CRUD操作对文件有什么意义? Vert.x具有用于异步文件操作的文件系统API,如果这就是您要找的内容http://vertx.io/docs/vertx-core/java/#_using_the_file_system_with_vert_x – tsegismont
@tsegismont感谢您的反馈。我试图更加精确。请参阅我的更新 – saw303