我使用Spring MVC + REST构建Web应用程序。我有一些HTTP请求更新用户的状态,另一些用于检索他的状态。
@RequestMapping(value = "/{id}", method = RequestMethod.POST)
@ResponseBody
public HttpEntity answer(@PathVariable(value = "id") Long id, @RequestParam("correct") Boolean result, Principal principal) throws JsonProcessingException, InterruptedException{
Competence comp = competenceservice.findById(id);
User user = userService.findByUsername(principal.getName());
interactionService.registerInteraction(comp, result, user);
return new ResponseEntity<>(HttpStatus.OK);
}
@RequestMapping(value = "/dailygoal/", method = RequestMethod.GET, produces = "application/json; charset=utf-8")
public HttpEntity<DailyGoal> getDailyGoal(Principal principal) {
Long goal = userservice.getDailyGoal(principal.getName());
Long achieved = userservice.getGoalAchieved(principal.getName());
return new ResponseEntity<>(new DailyGoal(goal, achieved), HttpStatus.OK);
}
我试图让它们尽可能独立,但我遇到了问题:在某些情况下我发出更新用户状态的请求,然后检索更新后的状态(使用另一个请求),但是,由于并发问题(我认为),有时我得到的状态没有更新。我一直在考虑两种可能的解决方案:
在我没有考虑的其中一个选项中是否有重要的东西?有人知道(更好)第三种选择吗?
答案 0 :(得分:1)
你的第一种方法是完美的。这是因为您始终希望用户在更新数据时查看更新的数据。
如果我要更新字段,请考虑这一点我希望看到结果或错误,以防出现一些一致性问题,以便我可以采取纠正措施。我只能在更新返回200 OK,4XX或5XX后才能执行此操作。因此,您应该始终等待更新响应,并根据响应仅决定下一步做什么。