저는 Vert.x를 처음 사용하고 있으며 로컬 파일 시스템의 JSON 파일에 데이터를 저장하는 작은 REST API를 구현하려고합니다.파일에 CRUD 작업을 수행하는 Verticle 작성하기
지금까지 REST API를 구현할 수 있었던 이유는 Vertx가 그 부분에서 잘 설명되어 있기 때문입니다.
내가 현재 찾고있는 것은 Vert.x에서 데이터 액세스 개체를 작성하는 방법의 예입니다. JSON이 포함 된 텍스트 파일에서 정밀 작업을 수행 할 수있는 Verticle을 구현하려면 어떻게해야합니까?
나에게 사례를 제공해 줄 수 있습니까? 어떤 힌트?
업데이트 1 : 나는 다음과 같은 생각하고 파일에 CRUD 작업으로
. 경로 /api/v1/user/:userid/records/
에 노출 된 Records
이라는 REST 리소스가 있다고 가정 해 보겠습니다.
내 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')
}
})
})
그런 다음 이러한 메시지 GET_TIME_ENTRIES
또는 CREATE_TIME_ENTRY
을 소비하는 또 다른 verticle있다. 나는이 소비자 verticle을 데이터 액세스 객체 인 Records
으로 생각한다. 이 verticle은 모든 사용자 레코드가 들어있는 주어진 :userid
의 파일을 읽을 수 있습니다.
- 는
- 는
- 업데이트를 기록
- 는 여기
가있는 또는 모든 기록을 삭제 특정 레코드를 읽고 모든 레코드를 읽을
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")
}
})
})
는 내가 달성하기 위해 노력하는 것은 POJO로 JSON (예를 들어,이 List<Records>
를) 내가 위에서처럼 파일을 읽고 deserialise하는 것입니다. Vertx에서 JsonObject
으로 작업하면 훨씬 편리합니다. JsonObject 인스턴스를 조작하고 싶지 않습니다.
파일에 대한 CRUD 작업이란 무엇을 의미합니까? Vert.x에는 찾고있는 경우 비동기 파일 작업을위한 파일 시스템 API가 있습니다. http://vertx.io/docs/vertx-core/java/#_using_the_file_system_with_vert_x – tsegismont
@tsegismont 님의 의견에 감사드립니다. 나는 더 정확하게하려고 노력했다. 내 업데이트 – saw303