为HTTP Post创建多个对象

时间:2019-04-05 11:24:21

标签: java spring spring-boot spring-mvc thymeleaf

我有一个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上创建一个对象正常工作, 如何通过添加多个要创建的对象来实现创建多个对象?

对于以下输入:

  

名称:TestDevice

     

UUID:““ 692f4a70-5783-11e9-b224-278854131dbb”

     

键入要创建的对象的设备编号5

我想要一个输出:

  

TestDevice1-5 692f4a70-5783-11e9-b224-278854 [131dbb]->此部分   每个对象的uuid类型设备已更改。

任何提示都值得赞赏

1 个答案:

答案 0 :(得分:1)

您可以通过这种方式

restart

注意:这里,需要使用JavaScript或JQuery在单击添加按钮时动态生成这些字段。