gpt4 book ai didi

java - 在 REST Web Controller 中添加 POST/PUT/PATCH 操作的链接

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:48 25 4
gpt4 key购买 nike

我有一个 Java 编写的 Web API,其中有处理 HTTP 请求的 Web Controller 。我正在尝试使用 Spring Boot 通过 HATEOAS 实现 RESTful 架构。在方法中添加 HATEOAS 链接时,我可以轻松添加 GET/DELETE 请求的链接,但我在处理 POST/PUT/PATCH 请求时遇到问题,主要是因为这些请求需要我提供我想要发布的内容的正文,通常采用 JSON 格式。我已经在谷歌上搜索了一段时间,但我不知道该怎么做。

以下是我向 GET/DELETE 操作添加链接的方法。

    /**
* Shows all the Rooms present in the database.
*
* @return OK status and a list of Room Minimal DTO.
*/
@GetMapping(path = "/", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> getRooms() {
List<RoomDTOMinimal> roomDTOList = roomRepository.getAllDTOWebInformation();
for (RoomDTOMinimal r : roomDTOList) {
if (userService.getUsernameFromToken().equals("ADMIN")) {
Link roomSensors = linkTo(methodOn(RoomsWebController.class).getSensors(r.getName())).withRel("Get Room" +
"Sensors");
Link deleteRoom = linkTo(methodOn(RoomsWebController.class).deleteRoom(r)).withRel("Delete this Room");
r.add(roomSensors);
r.add(deleteRoom);
} else if (userService.getUsernameFromToken().equals("REGULAR_USER")) {
Link roomTemp = linkTo(methodOn(RoomsWebController.class).getCurrentRoomTemperature(r.getName())).
withRel("Get Room Temperature");
r.add(roomTemp);
}
}
return new ResponseEntity<>(roomDTOList, HttpStatus.OK);
}

我想添加一个指向“editRoom”请求的链接,例如:

                Link editRoom = linkTo(methodOn(RoomsWebController.class).configureRoom(r.getName(),  WHAT GOES HERE???).withSelfRel();

但是configureRoom在其签名中接受roomName和roomDTO。 RoomDTO 是一个@RequestBody,所以我无法将其提供给链接。我应该如何添加到对象的链接,然后允许我调用该方法?

我想要这样的东西:

房间 |删除 |编辑

在客户端,如果我单击“删除”,房间就会被删除,如果我单击“编辑”,客户端就会展开,并带有文本框,允许我插入编辑房间所需的参数。我已经为编辑功能实现了客户端代码,并具有适当的前端;但如果没有从用户输入中提供稍后应该提供的数据,我就无法在服务器端链接到它。最好的方法是什么?

最佳答案

在与团队领导交谈后,我已经解决了这个问题。显然,在上述场景中传递 null 或空 DTO 对象作为参数是可以接受的; HATEOAS 实现特别关心路径中的那些参数,粗略地说忽略其他参数。然后,当用户执行操作/插入输入时,可以根据需要在客户端替换这些内容。

关于java - 在 REST Web Controller 中添加 POST/PUT/PATCH 操作的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com