【问题标题】:Get @RequestMapping value of different method in same controller获取同一控制器中不同方法的@RequestMapping 值
【发布时间】:2017-03-12 03:27:26
【问题描述】:

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

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

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

有没有办法让createNewUser 方法获得分配给confirmUser 的@RequestMapping 值?我想使用这个值来生成确认链接,而不是硬编码。

// 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) {

}

【问题讨论】:

  • 为什么不将confirmUser服务与createNewUser合并,这显然会返回确认响应。
  • @PratikAmbani 因为 confirmUser() 只有在用户点击电子邮件中的确认链接时才会被调用。 createNewUser() 方法是在他们成功填写注册表时。
  • 顺便说一句,更改 HTTP GET 请求的状态不是一个好习惯(我想您更新数据库中的用户信息以注意他已确认),因此更改您的 ' 将是一个更好的做法ConfirmUser 的方法是 HTTP POST。
  • @AlonSegal 好点...谢谢

标签: java spring spring-boot request-mapping


【解决方案1】:

我不知道如何从 @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) {

}

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

【讨论】:

    【解决方案2】:

    如果需要根据用户请求生成链接,可以使用控制器中的路径变量。你可以获取路径变量并使用一些机制来验证路径。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2015-07-23
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多