获取同一控制器中不同方法的@RequestMapping值

Get @RequestMapping value of different method in same controller

使用 Spring 引导,我的 RegisterController 中有几个方法可以处理新用户注册。

createNewUser 方法负责将新用户保存到数据库并发送一封确认电子邮件,其中包含具有唯一令牌的 link。

confirmUser 方法处理确认 link 的 GET 请求。

有没有办法让 createNewUser 方法获得分配给 confirmUser@RequestMapping 值?我想使用这个值来生成确认 link 而不是对其进行硬编码。

// Process form input data
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) {

}

// Process confirmation link
// Link in confirmation e-mail will be /registerConfirmation?token=UUID
@RequestMapping(value="/registerConfirmation", method = RequestMethod.GET)
public ModelAndView confirmUser( @RequestParam("token") String token) {

}

我不知道有什么方法可以从 @RequestMapping 值中获取它,但您有几个不同的选择。

选项 1:为映射创建常量并使用允许您在两种方法中引用它的常量。

private final static String REGISTER_CONF_VAL = "/registerConfirmation";

@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) {

}

// Process confirmation link
// Link in confirmation e-mail will be /registerConfirmation?token=UUID
@RequestMapping(value=REGISTER_CONF_VAL, method = RequestMethod.GET)
public ModelAndView confirmUser( @RequestParam("token") String token) {

}

选项 2:不太理想,但如果您将 registerConfirmation 添加到您的配置文件,您可以像这样访问它:

@RequestMapping(value="${register.conf.val}", method = RequestMethod.GET)
public ModelAndView confirmUser( @RequestParam("token") String token) {

}

这不是理想的原因是因为您可能不希望它因环境而异。也就是说,它会起作用。

如果需要根据用户请求生成link,可以在控制器中使用Path Variable。您可以获得路径变量并使用某种机制来验证路径。

将registerConfirmation替换为{registerConfirmation},并在方法中使用@PathVariable注解获取路径。使用变量检查路径是否有效。