如何正确构建"PUT method"并执行"intern request"?



我是Spring和Java的新手(我可能没有使用正确的词汇,尤其是在英语中(,我正在尝试建立一个小型数据库。但是我对PUT方法的语法有问题。(目前一切正常(

所以我有一个名为GameEntity的公共类,它包含一个id、一个名称和一个名为PlayerEntity的对象列表(我从堆栈溢出帖子中删除了导入只是为了更清楚地看到(

public class GameEntity {
@Id
@GeneratedValue
private Integer id;
private String name;
@OneToMany
private List<PlayerEntity> players;
public GameEntity() { }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public List<PlayerEntity> getPlayers() { return players; }
public void setPlayers(List<PlayerEntity> players) { this.players = players; }
}

PlayerEntity对象的构建方式与GameEntity相同,但只是具有id名称

以下是GETPOST的映射(对于PlayerEntity也是如此(:

@RestController
public class GameController {
private final GameRepository gameRepository;
public GameController(GameRepository gameRepository) {
this.gameRepository = gameRepository;
}
@GetMapping("/games")
public List<GameEntity> getAllGames() {
return this.gameRepository.findAll();
}
@PostMapping("/games")
public GameEntity createGame(@RequestBody GameEntity gameEntity) {
return this.gameRepository.save(gameEntity);
}
}

现在,我可以">发布">游戏实体和玩家实体,但我希望将玩家实体创建到游戏实体中的玩家实体对象列表中。

所以我想我将不得不">PUT"创建的游戏实体。但是我怎样才能"到达">玩家实体?我可以做一些类似内部请求的事情吗?语法可能是什么? 执行两个请求来创建两个对象并将一个对象放入另一个对象是最好的方法吗? 直到现在我错过了什么吗?

我有点迷茫,任何建议都会有很大帮助!

提前谢谢。

如果两个对象都可以独立存在,它们都应该有一个 POST。我假设在创建游戏时,您的播放器已经存在?在这种情况下,当您发布游戏时,您可以立即将玩家包含在其集合中。

如果您需要更新玩家列表,有多种方法:

  1. PUT /game/{id}包括所有玩家。请注意,理想情况下,PUT应该覆盖整个资源,因此应包括游戏的所有字段。
  2. PUT /game/{id}/players将以前的玩家列表替换为新玩家。再次 - 包括整个列表,但现在您不必发送游戏的所有字段。
  3. POST /game/{id}/player- 将新玩家添加到游戏中。这是POST的,因为这样的端点将不再是幂等的。如果你走这条路,你还必须创建DELETE /game/{id}/players.
  4. 在更复杂的操作的情况下,您可能需要考虑PATCH- 它可能是非幂等的,并且可以部分更新资源。

前 3 个是 RESTful,最后一个不是 - 动词可能会开始爬入 URI。

一般来说,幂等架构更安全、更简单,因此您应该开始考虑前 2 个。如果它很复杂 - #3 也很好。如果您认为它不起作用(例如,由于性能下降或其他因素(,那么您可以考虑第 4 个选项。

最新更新