Я тестирую приложение Corda 4 Cordapp и настроил весенний веб-сервер, чтобы делать вызовы API для моих приложений cordapps. У меня есть один API с именем ``get-all-contract1-states``, который делает именно то, что говорит. Он получает все мои состояния Contract1 в хранилище.
Когда я вызываю эту функцию, она возвращает состояния, но также возвращает чрезмерное количество повторяющихся метаданных, что делает вывод для 1 состояния более 600 тыс. строк.
@GetMapping(value = "/get-contract1-states", produces = arrayOf(MediaType.APPLICATION_JSON_VALUE))
fun getContract1s() = rpcOps.vaultQueryBy(criteria = VaultQueryCriteria(status = Vault.StateStatus.ALL), paging = PageSpecification(DEFAULT_PAGE_NUM, 200), sorting = Sort(emptySet()), contractStateType = contract1State::class.java).states
Большая часть повторяющихся метаданных (которые составляют около 85% из 600 тыс. строк) находится в конце Json относительно "zero":false,"one":false,"fieldSize":256,"fieldName":"SecP256R1Field". Есть ли какие-то флаги, опции или просто способ вернуть чистую версию контракта без лишних данных. Меня интересуют только переменные из контракта, не более того.
То, что у вас есть на данный момент, вернет вам коллекцию:
data class Page<out T : ContractState>(val states: List<StateAndRef<T>>,
val statesMetadata: List<StateMetadata>,
val totalStatesAvailable: Long,
val stateTypes: StateStatus,
val otherResults: List<Any>)
Следовательно, почему вы получаете все метаданные. То, что вам нужно в этом объекте данных, - это состояния (которые фактически возвращают StateAndRef), а затем просто состояние внутри каждого.
Следующий код должен дать вам то, что вам нужно:
@GetMapping(value = "/get-contract1-states", produces = arrayOf(MediaType.APPLICATION_JSON_VALUE))
fun getContract1s() = proxy.vaultQueryBy(criteria = QueryCriteria.VaultQueryCriteria(status =
Vault.StateStatus.ALL), paging = PageSpecification(DEFAULT_PAGE_NUM, 200),
sorting = Sort(emptySet()), contractStateType = IOUState::class.java).states.map { it.state.data }
Примечание: ключевым битом здесь является сопоставление с состояние.данные.