Spring Boot中PostMapping重定向GetMapping不生效问题求助
问题根因与修复方案
核心问题梳理
- 逻辑顺序错误,未在满足重定向条件时终止后续执行。你当前的代码中,就算
campaignCount >=20给url赋了重定向值,代码还是会继续往下走执行migrationService.migrate()的更新逻辑,完全不符合你「满足条件就不执行更新」的预期。 - 返回值异常。当不满足重定向条件时,
url始终为null,SpringMVC无法识别null作为视图跳转路径,会直接抛出异常。 - 参数定义风险。
campaignCount被声明为required=false的请求参数,但类型用了基本类型int,如果前端不传该参数,Spring无法给基本类型赋值为null,会直接抛出参数绑定异常,需要改为包装类型Integer。
修复后代码
@PostMapping(path = "/campaign/services/migrate") public String migrateCampaigns( // 把int改为Integer避免无传参时的绑定异常 @RequestParam(required = false, value = "campaignCount") Integer campaignCount, @RequestParam(required = false, value = "client-email") String clientEmail, @RequestParam(required = false, value = "campaign-id") List<String> campaignIds, @RequestParam(required = false, value = "selectAllCampaigns") String selectAllCampaigns, HttpServletRequest request, HttpServletResponse httpResponse, Model model) throws ServletException, IOException { logger.info("Retrieving source and destination credential from cookies"); // 满足条件直接返回重定向,不执行后续更新逻辑 if(campaignCount != null && campaignCount >= 20) { return "redirect:/login/oauth/login-with-eloqua"; } // 不满足重定向条件才执行更新逻辑 String adminsEmail = contactService.getEmail(siteNameForEmail); String userEmail = cookieService.retrieveCookieValue(cookieDefinitionUserEmail); String clientsEmailAddresses = adminsEmail + "," + userEmail; migrateResponse = migrationService.migrate(campaignIds, request.getCookies(), clientsEmailAddresses); // 这里返回你原本的业务视图路径即可,不要返回null return migrateResponse; } @GetMapping(path = "/login/oauth/login-with-eloqua") public String eloquaOauthLoginPage(HttpServletRequest request, Model model, HttpServletResponse response) { return "login/oauth/login-with-eloqua"; }
额外注意点
如果重定向后出现404,确认你的项目视图解析器配置正确,login/oauth/login-with-eloqua对应的模板文件存在且路径匹配即可。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

