在寻找带有“+”的电子邮件时,通过电子邮件获取GET失败

时间:2018-05-29 20:34:35

标签: grails gorm

我有一个应用程序可以将有关某个人的信息存储到数据库中,但当我尝试使用该网址GET时,用户根据其电子邮件地址在其电子邮件中使用+的用户不能被发现。

返回人员的示例网址:

https://www.someURL.com/api/people/johnsmith@someemail.com

返回person的示例网址(返回null):

https://www.someURL.com/api/people/jane+doe@someemail.com

这两封电子邮件都在URL中编写的数据库中,因此它似乎不是拼写错误,我使用邮递员来测试GET方法。为什么我无法找到它们,我怎样才能找到它们以便即使使用+字符也可以找到它们?

Working postman request

NOT working postman request

当我用id搜索时,我能找到这个人,所以我知道这个人存在。

Verification that person exists

2 个答案:

答案 0 :(得分:1)

我的建议是:将服务器实现从GET更改为POST,并在请求正文中提供电子邮件作为String参数。它可以防止这种情况以及在URI中转义特殊字符的任何类似问题。

如果无法实现,请尝试使用单个' 或双" 引号构建电子邮件地址,具体取决于您的Web服务器也会处理它可能有用的传入请求。

很高兴知道" +"并不是真正有效的'许多电子邮件提供商的角色有一个原因。例如,Gmail不允许您使用除[A-z0-9](字母数字)和点(。)字符之外的任何内容创建电子邮件地址。我很确定他们已经厌倦了验证具有复杂正则表达式的输入电子邮件,并将其限制为基本的。

答案 1 :(得分:1)

'+'是URI中的保留字符,因此为了防止它被解释为空格字符,您需要percent-encode它。在您的示例中,将'+'替换为'%2B'。

https://www.someURL.com/api/people/jane%2Bdoe@someemail.com

还有其他characters that are allowed in email addresses但是URI中的保留字符,因此最好对整个电子邮件地址进行百分比编码,以防万一。