为啥我有这种错误的行为,将电子邮件地址作为 Spring MVC 路径变量的值传递? [复制]

Posted

技术标签:

【中文标题】为啥我有这种错误的行为,将电子邮件地址作为 Spring MVC 路径变量的值传递? [复制]【英文标题】:Why I have this wrong behavior passing an e-mail address as value of a Spring MVC path variable? [duplicate]为什么我有这种错误的行为,将电子邮件地址作为 Spring MVC 路径变量的值传递? [复制] 【发布时间】:2016-08-24 16:16:39 【问题描述】:

我发现在 Spring MVC 中使用这种 path variable 的特殊情况有些困难。

所以我打开一个这样的 URL:

localhost:8080/my-project/utenze/my.username/confermaEmail/my.email@google.com

在我的控制器类中,我有这个处理 URL 的控制器方法:

@RequestMapping(value = "utenze/username/confermaEmail/email", method = RequestMethod.GET)
    public String confermaModificaEmail(@RequestHeader(value = HEADER_USER_CG) String codicefiscale, 
                                        @PathVariable String username, @PathVariable String email, Model model)  

        logger.info("INTO confermaModificaEmail(), indirizzo e-mail: " + email);

        ...................................................................
        ...................................................................
        ...................................................................

        return "myView";

上一个请求已正确处理,但 email 路径变量值存在以下问题。

问题是 email 路径变量值不是我期望的 my.emai@google.com 而是 my.emai@google。

Spring 会自动删除插入值的最后一个 .com 部分。

为什么?问题是什么?我错过了什么?我该如何解决这个问题?

【问题讨论】:

解决此问题的快速方法是:创建一个方法(例如 emailFixer)并检查电子邮件(方法参数)与电子邮件最后是否存在 .com,如果不存在则添加它并返回它。 见***.com/a/34164388/2696260 【参考方案1】:

在你的情况下,我会从路径变量中删除 email 并通过请求参数请求它:

@RequestMapping(value = "utenze/username/confermaEmail", method = RequestMethod.GET)
public String confermaModificaEmail(@RequestHeader(value = HEADER_USER_CG) String codicefiscale, 
                                    @PathVariable String username, @RequestParam(value="email", required=true) String email, Model model)  

    logger.info("INTO confermaModificaEmail(), indirizzo e-mail: " + email);

    ...................................................................
    ...................................................................
    ...................................................................

    return "myView";

试试这个=)

【讨论】:

这对我来说不是一个解决方案,因为我必须使用这个不使用参数作为电子邮件值的 URL username 也会失败,因为用户名也包含点。 建议使用此方法,而不是将其作为路径变量发送。

以上是关于为啥我有这种错误的行为,将电子邮件地址作为 Spring MVC 路径变量的值传递? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在通过 as.character() 将列表强制为字符时会出现这种行为?

为啥 GDB 会启动一个新的 shell 以及如何禁用这种行为?

为啥 Node.js 会以这种方式执行?

为啥将地址右移三位作为固定大小哈希表的哈希函数?

常量和编译时评估 - 为啥要改变这种行为

为啥发送电子邮件并且不出现验证错误? (如果用户不填写主题和消息字段)