Создание нескольких объектов для HTTP Post - PullRequest
1 голос
/ 05 апреля 2019

У меня есть API «Устройство», которое не поддерживает ввод нескольких объектов. Я хочу ввести число в поле «количество создаваемых объектов». После нажатия кнопки отправки приложение должно использовать мои входные данные каксоздать шаблон и создать список с этими объектами, изменив только UUID и имя.

(Поскольку API не поддерживает ввод нескольких объектов, я хотел добавить эти объекты в список, а затем выполнить итерацию по этому спискуи просто вызываю мой метод createDevice для каждого объекта в списке.)

Так как я новичок в тимелии и весне, я действительно понятия не имею, как мне реализовать что-то вроде этого:

Вот пример кода:

DeviceController:

//SIMPLE Controller
private final DeviceService deviceService;
public IndexController(DeviceService deviceService) {
   this.deviceService = deviceService;
}
@GetMapping("/createDevice")
public String createDeviceForm(Model model){
   model.addAttribute("device",new Device());
   return "createDeviceForm";
}
@PostMapping("/createDevice")
public ResponseEntity<Device> processCreateDevice(@ModelAttribute Device device){
   return deviceService.createDevice(device);
}

POJO:

private Id id;
private CustomerId customerId;
private TenantId tenantId;
private String name;
private String type;
private final static long serialVersionUID = -49143341481414714L;
public Device() {
   this.id = new Id();
   this.tenantId = new TenantId();
   this.customerId = new CustomerId();
   this.setId(this.id);
   this.setTenantId(this.tenantId);
   this.setCustomerId(this.customerId);
}

Сервис:

public DeviceServiceImpl(RestTemplate restTemplate) {
   this.restTemplate = restTemplate;
}
@Override
public ResponseEntity<Device> createDevice(Device device) {
   String baseLink = "http://localhost:9090/api/device/";
   RequestEntity<Device> requestEntity = null;
   ResponseEntity<Device> responseEntity = null ;
   try {
       requestEntity = RequestEntity.post(new URI(baseLink)).header("X-Authorization","Bearer " + jwtToken)
                    .contentType(MediaType.APPLICATION_JSON)
                    .body(deviceWrapper);
   }catch(URISyntaxException e) {
       e.printStackTrace();
   }
   if(requestEntity != null ) {
       responseEntity = restTemplate.exchange(requestEntity, Device.class);
   }
   return responseEntity;
}

Простой шаблон тимелина:

<form action="#" th:action="@{/createDevice}" th:object="${device}" method="post">
    <p>Device ID <input type="text" th:field="*{id.id}" /></p>
    <p>ENTITYTYPE</p><select th:field="*{id.entityType}">
        <option th:each="type : ${T(com.tomilekar.thingsboard.Model.EntityType).values()}" th:value="${type}" th:text="${typeStat}">Type</option>
    </select>
    <p>Tenant.ID<input type="hidden" th:field="*{tenantId.id}"/></p><p th:text="${device.tenantId.id}"></p>
    <p>Tenant.Entitytype </p> <p th:text="${device.tenantId.entityType}"></p>
    <p>Customer.ID<input type="hidden" th:field="*{customerId.id}"/></p><p th:text="${device.tenantId.id}"></p>
    <p>Customer.Entitytype </p> <p th:text="${device.customerId.entityType}"></p>
    <p>Device.name.id</p> <input type="text" th:field="*{name}"/>
    <p>Device.Type.id</p> <input type="text" th:field="*{type}"/>
//// ADD button to create multiple objects
    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>

Работает создание одного объекта в целевом API, как я могу добиться создания нескольких объектовдобавив несколько объектов для созданияe?

Для следующего ввода:

Имя: TestDevice

UUID: "" 692f4a70-5783-11e9-b224-278854131dbb "

Тип Устройство число объектов для создания 5

Я хотел бы вывод:

TestDevice1-5 692f4a70-5783-11e9-b224-278854 [131dbb] ->эта часть изменена для uuid Тип устройства для каждого объекта.

Любые советы приветствуются

1 Ответ

1 голос
/ 05 апреля 2019

Вы можете сделать это следующим образом

<p>Device.name.id</p> <input type="text" th:field="*{name[0]}"/> //Default
<p>Device.Type.id</p> <input type="text" th:field="*{type[0]}"/> //Default

<p>Device.name.id</p> <input type="text" th:field="*{name[1]}"/> //Generate Dynamically
<p>Device.Type.id</p> <input type="text" th:field="*{type[1]}"/> //Generate Dynamically
.
.
.
<p>Device.name.id</p> <input type="text" th:field="*{name[n]}"/> //Generate Dynamically
<p>Device.Type.id</p> <input type="text" th:field="*{type[n]}"/> //Generate Dynamically

Примечание. Здесь эти поля необходимо динамически генерировать при нажатии кнопки ADD с помощью JavaScript или JQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...