как получить данные только из запроса хранилища - PullRequest
0 голосов
/ 11 апреля 2020

Я использую java клиент для выполнения запроса хранилища в Corda, получая полное хранилище как вывод запроса хранилища. Хотите знать, как извлечь поле данных из этого json. Часть результата выглядит следующим образом

{
    "states": [
        {
            "state": {
                "data": {
                    "accountId": "1",
                    "value": 200,

1 Ответ

0 голосов
/ 11 апреля 2020

Это больше вопрос SpringBoot; вот как вы это делаете:

  1. Допустим, у вас есть состояние (MyState) со следующими атрибутами:
    • эмитент: Сторона
    • accountId: String
    • значение: int
  2. Внутри вашего clients модуля (т.е. модуля веб-сервера) создайте класс модели ответа для вашего состояния; это простой класс, имеющий атрибуты, которые вы хотите вернуть в JSON объекте:
public class MyStateResponseModel {
    // Notice that I defined "issuer" as a String,
    // because I want my response only to return the name;
    // not the full "Party" object
    private String issuer;
    private String accountId;
    private int value;

    // Add getters and setters.
}
Создание сопоставителя модели ответа для вышеуказанного класса:
@Component
public class MyStateResponseModelMapper extends ModelMapper {
    PropertyMap<MyState, MyStateResponseModel> map;

    public MyStateResponseModelMapper() {
        map = new PropertyMap<MyState, MyStateResponseModel>() {
            @Override
            protected void configure() {
                map().setIssuer(source.getIssuer().getName().toString());
                map().setAccountId(source.getAccountId());
                map().setValue(source.getValue());                
            }
        };
    }
}
Теперь внутри вашего класса контроллера, где у вас есть код вашего API:
// Define an instance of the mapper; it will get injected by SpringBoot.
private final MyStateResponseModelMapper myStateResponseModelMapper;

// Constructor injection.
public MyController(MyStateResponseModelMapper myStateResponseModelMapper) {
    this.myStateResponseModelMapper = myStateResponseModelMapper;
}

// Your API.
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
private ResponseEntity<MyStateResponseModel> getMyState(/*some request params*/) {
    // You do some query or run a flow that returns an instance
    // of "MyState" called "myState".
    return ResponseEntity.ok()
        .body(myStateResponseModelMapper.map(myState, MyStateResponseModel.class));
}
...