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

标签 java rest spring-boot spring-hateoas

我有一个 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/

相关文章:

java - 为什么这段代码不能在Java中运行?

java - Paho Java - 文件持久性

java - 数学难题

java - tomcat上的Spring Boot WAR文件部署显示错误404

java - spring中基于groups的动态POJO验证

Java文件传输文件到服务器

java - 移动应用业务逻辑层策略

rest - 计算 REST API 的 ETag

javascript - Access-Control-Allow-Origin 在 AngularJS 应用程序中不起作用

Spring OAuth2 : DuplicateKeyException when using JdbcTokenStore and DefaultTokenServices under heavy load