Spring MVC - 传递http请求参数不匹配相同的String值,为什么?

时间:2015-09-30 10:10:06

标签: java spring jsp spring-mvc encoding

我正以这种方式传递值为“adrian@domain.com”的电子邮件参数:

.../confirmation?email="adrian@domain.com"

该请求通过以下Controlerr方法处理,该方法将参数赋给ModelAtrribute添加到confirm.jsp视图中:

@RequestMapping(value="/confirmation")
    public String accessConfirmationForm(@RequestParam(value = "email") String email, Model model)
    {
        ConfirmationCode confCode = new ConfirmationCode();
        confCode.setEmail(email);
        model.addAttribute("confCode", confCode);

        return "confirm";
    }

这是来自confirm.jsp的代码:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ page session="false" %>
<html>
<head>
<title>Confirmation</title>
</head>
<body>

<form:form modelAttribute="confCode" action="${pageContext.request.contextPath}/confirm" method="get">
<table>
<tr>
<td>Confirmation code for email ${confCode.email}:</td>
<td><form:input path="confirmationCode" /></td>
<td><font color="red"><form:errors path="confirmationCode"></form:errors></font></td>
<td><form:hidden path="email" value= "${confCode.email}" /></td>
</tr>
<tr>
<td><input type="submit" value="Confirm"></td>
</tr>
</table>
</form:form>

提交表单请求后,将重定向到以下控制器的方法:

@RequestMapping(value = "/confirm", method = RequestMethod.GET)
    public String confirmUser(
//          @RequestParam(value = "email", required=false) String email,
            @Valid @ModelAttribute(value = "confCode") ConfirmationCode confCode, BindingResult result,
            Model model) {...}

问题是此阶段confCode属性的电子邮件变量不等于manualy类型字符串“adrian@domain.com”,但是当在控制台上打印电子邮件变量时,我可以看到相同的字符串“adrian@domain.com”没有任何尾随空格。

当我试图通过电子邮件获取DAO实现类中的实体时,它会导致电子邮件变量不适用:

//it causes null reference 
Emails mail = entityManager.find(Emails.class, email);

//it returns proper Entity
Emails mail = entityManager.find(Emails.class, "adrian@domain.com");

我认为这两个字符串不相等的原因可能是编码,也许?我的数据库中的编码是latin-1(iso 8859-1)?

如何解决这个问题?

为什么两个字符串彼此不相等?

1 个答案:

答案 0 :(得分:1)

... /确认电子邮件=&#34; adrian@domain.com"

我认为参数值不应该有双引号