如何在Spring Boot中重定向单页面应用程序?

时间:2017-05-12 04:34:40

标签: java spring

我有一个Spring Boot应用程序的注册端点。 UI是React单页面应用程序。

我想让SPA应用程序重定向到“/ login”(发出GET请求)。

我该怎么做?

我尝试了以下两种方法:

第一种方法不起作用,邮递员中的响应http代码为200,主体仅包含“redirect:/ login”

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String signup(@RequestBody CustomUserDetails user, HttpServletResponse response) {

    String userName = user.getUsername();
    logger.debug("User signup attempt with username: " + userName);

    try{
        if(customUserDetailsService.exists(userName))
        {
            logger.debug("Duplicate username " + userName);
            return "redirect:/login";
        } else {
            customUserDetailsService.save(user);
            authenticateUserAndSetSession(user, response);
        }
    } catch(Exception ex) {
    }
            return "redirect:/login";
}

我也尝试过以下方法。但它抛出Method Not Allowed异常。因为当请求类型为login时,我有POST的控制器

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public ModelAndView signup(@RequestBody CustomUserDetails user, ModelMap model, HttpServletResponse response) {

    String userName = user.getUsername();
    logger.debug("User signup attempt with username: " + userName);

    try{
        if(customUserDetailsService.exists(userName))
        {
            logger.debug("Duplicate username " + userName);
            return new ModelAndView("redirect:/login", model);
        } else {
            customUserDetailsService.save(user);
            authenticateUserAndSetSession(user, response);
        }
    } catch(Exception ex) {
    }
    return new ModelAndView("redirect:/redirectedUrl", model);
}

我该如何处理此重定向?什么是最佳做法?

1 个答案:

答案 0 :(得分:1)

最佳做法是不应该在Spring Boot Controller中重定向。

您需要做的是从/signup端点返回状态代码。

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public ResponseEntity<String> signup(@RequestBody CustomUserDetails user, HttpServletResponse response) {

    String userName = user.getUsername();
    logger.debug("User signup attempt with username: " + userName);

    try{
        if(customUserDetailsService.exists(userName))
        {
            logger.debug("Duplicate username " + userName);
            return new ResponseEntity<String>(HttpStatus.OK);
        } else {
            customUserDetailsService.save(user);
            authenticateUserAndSetSession(user, response);
        }
    } catch(Exception ex) {
    }
    return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
}

因此,当用户在系统中具有用户名时,端点将返回HTTP状态200,而当没有找到具有给定用户名的用户时,端点将返回HTTP状态404。您必须使用此信息在前端单页应用程序中进行路由(这是在AngularJS中完成的方式等)。