Как получить состояние с помощью пользовательского запроса? Приложение Corda, использующее веб-сервер Spring boot, — ошибка при получении результата

#spring #spring-boot #kotlin #corda

#spring #spring-boot #kotlin #corda

Вопрос:

Я создал долговую расписку в приложении corda, долговая расписка имеет идентификатор, полезную нагрузку xml в теле, имя участника. ТЕПЕРЬ я хочу получить состояние с помощью пользовательского запроса, основанного на идентификаторе. ПРИМЕЧАНИЕ — я не использую linearID.

Ниже приведен мой вызов API, который выдает синтаксическую ошибку. Может кто-нибудь, пожалуйста, поправьте меня, что я делаю не так.

 @GetMapping(value = ["getIous"],produces = [ MediaType.APPLICATION_JSON_VALUE])
    private fun getTransactionOne(@RequestParam(value = "payloadId") payloadId: String): ResponseEntity<List<IOUState>> {
        val generalCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL)
        val results = builder { IOUState::iouId.equal(payloadId)
            val customCriteria = QueryCriteria.VaultCustomQueryCriteria(results)}

            val criteria = customCriteria.and(customCriteria)

            val res = proxy.vaultQueryBy<IOUState>(criteria)
            return ResponseEntity.ok(res)
    }
  

Комментарии:

1. в какой строке вы получаете синтаксическую ошибку?

2. Строка 1- значение customCriteria = QueryCriteria. VaultCustomQueryCriteria(результаты)} Строка 2- критерий значения = customCriteria.and (customCriteria), строка 3- возвращает ResponseEntity.ok (res)

Ответ №1:

Я думаю, проблема в том, что VaultCustomQueryCriteria применимо только к StatePersistable объектам. Поэтому вы должны использовать PersistentIOU вместо IOUState . Кроме того, я мог видеть неправильное использование скобок. Вот как должен выглядеть ваш код:

 @GetMapping(value = ["getIous"],produces = [ MediaType.APPLICATION_JSON_VALUE])
private fun getTransactionOne(@RequestParam(value = "payloadId") payloadId: String): ResponseEntity<List<IOUState>> {
        val generalCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL)
        val results = builder {
            val idx = IOUSchemaV1.PersistentIOU::iouId.equal(payloadId);
            val customCriteria = QueryCriteria.VaultCustomQueryCriteria(idx)
            val criteria = generalCriteria.and(customCriteria)
            proxy.vaultQueryBy<IOUState>(criteria);
        }
        return ResponseEntity.ok(results)
}