Java 使用spring处理请求时如何不返回

Java 使用spring处理请求时如何不返回,java,mysql,spring,Java,Mysql,Spring,我目前正在使用spring用javascript和java构建一个游戏。现在,它是一个设置,每当玩家死亡时,它都会向我设置的控制器提交post请求。从这里开始,它将运行一个将分数插入数据库的方法。问题是,当使用Spring时,我必须有一个返回语句,将它们指向一个视图。现在我只是让他们回到游戏中,让整个页面刷新(重定向)。有没有一种方法可以捕获post请求并只运行要插入的方法,而不执行任何返回操作并将它们保持在同一页面上?谢谢 @PostMapping("/getScore") public S

我目前正在使用spring用javascript和java构建一个游戏。现在,它是一个设置,每当玩家死亡时,它都会向我设置的控制器提交post请求。从这里开始,它将运行一个将分数插入数据库的方法。问题是,当使用Spring时,我必须有一个返回语句,将它们指向一个视图。现在我只是让他们回到游戏中,让整个页面刷新(重定向)。有没有一种方法可以捕获post请求并只运行要插入的方法,而不执行任何返回操作并将它们保持在同一页面上?谢谢

 @PostMapping("/getScore")
public String getScore(@RequestParam(name = "scoreResult") String score) {
    try {
        User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        long finalScore = Long.parseLong(score);
        long currentUserId = user.getId();
        String currentDate = userRepo.currentDate();
        userRepo.insertGameScore(currentDate, finalScore, currentUserId);
        long playersSumScore = Long.parseLong(userRepo.getTotalPointsByUsername(user.getUsername()));
        if (playersSumScore > 0 && playersSumScore <= 25000) {
            userRepo.updateRank("junior", currentUserId);
        } else if (playersSumScore > 25000 && playersSumScore <= 50000) {
            userRepo.updateRank("mid", currentUserId);
        } else if (playersSumScore > 50000 && playersSumScore <= 75000) {
            userRepo.updateRank("senior", currentUserId);
        }  else if (playersSumScore > 75000 && playersSumScore <= 100000) {
            userRepo.updateRank("wizard", currentUserId);
        }
            return "redirect:/";
    } catch (ClassCastException e) {
        return "redirect:/";
    }
@PostMapping(/getScore)
公共字符串getScore(@RequestParam(name=“scoreResult”)字符串分数){
试一试{
User User=(User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
long finalScore=long.parseLong(分数);
long currentUserId=user.getId();
字符串currentDate=userRepo.currentDate();
userRepo.insertGameScore(currentDate、finalScore、currentUserId);
long playersSumScore=long.parseLong(userRepo.getTotalPointsByUsername(user.getUsername());

如果(playersSumScore>0&&playersSumScore 25000&&playersSumScore 50000&&playersSumScore 75000&&playersSumScore您需要一个rest控制器来不返回spring视图

  • 您可以使用@RestController注释控制器
  • 您可以说您的方法将有一个响应体
  • 例如:

     @PostMapping("/getScore")
     @ResponseBody
     public ResponseEntity<?> getScore(@RequestParam(name = "scoreResult") String score) {
           // method logic
           return new ResponseEntity<>(HttpStatus.ACCEPTED);
     }
    
    @PostMapping(/getScore)
    @应答器
    公共响应性getScore(@RequestParam(name=“scoresult”)字符串分数){
    //方法逻辑
    返回新的响应状态(HttpStatus.ACCEPTED);
    }
    
    作为建议,端点名称令人困惑:包含get,实际上是一个post。此外,逻辑应该封装在服务中。 请考虑这个变体以更好的理解:

     @Autowired
     UserService userService;
    
     @PostMapping("/score/{score}")
     @ResponseBody
     public ResponseEntity<?> submitScore(@PathVariable(name = "score") String score) {
          userService.submitScore(score);
          return new ResponseEntity<>(HttpStatus.ACCEPTED);
     }
    
    @Autowired
    用户服务用户服务;
    @后期映射(“/score/{score}”)
    @应答器
    公共响应提交中心(@PathVariable(name=“score”)字符串分数){
    userService.submitScore(分数);
    返回新的响应状态(HttpStatus.ACCEPTED);
    }
    
    您可以使用@respoinseBody annotation on方法指定它返回主体而不是视图。 或者,您可以将@Controller类注释替换为@RestController,但是,这将使Controller类的所有方法都具有隐式@ResponseBody


    所以,如果您只需要一个方法来返回响应而不是视图,请在方法上使用@ResponseBody。如果您希望类的所有方法都返回响应而不是视图,请在类上使用@RestController。

    查看AJAX请求,以及更一般的单页应用程序(SPA)考虑返回一些东西到浏览器,即使是一个简单的成功/失败,让用户知道发生了什么,而不是写一个<代码> @控制器< /Cord>类创建<代码> RestCube < /Cord>类,然后使用Ajax调用它的方法,该方法在不刷新页面的情况下工作。