Spring MVC 混淆了具有相同请求映射的 get 和 post 方法
Spring MVC is confusing get and post methods with the same request mapping
我有一个登录控制器,我已将“/login”路径映射到两种不同的方法。将调用一个用于 get,另一个用于 post.
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model){
LoginDto loginDto = new LoginDto();
model.addAttribute("loginDto", loginDto);
return "home/login";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String doLogin(@Valid LoginDto loginDto, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "home/login";
}
return "redirect:/";
}
我有百里香叶型
<form method="POST" th:action="@{/login}" th:object="${loginDto}">
<div class="form-group-row">
<label> Email </label>
<input type = "text" th:field = "*{email}"/>
<span th:if="${#fields.hasErrors('email')}" th:errors = "*{email}"></span>
</div>
<div>
<label> Password </label>
<input type = "text" th:field = "*{password}"/>
</div>
<input type="submit" />
</form>
当输入数据并点击提交时,调用 GET 请求的方法。我通过在两种方法中插入断点知道这一点。此外 url 现在在它的末尾有一个 ?errors 。我还将 url 到第二种方法的映射更改为 "doLogin" 像这样
@RequestMapping(value = "/dologin", method = RequestMethod.POST)
public String doLogin(@Valid LoginDto loginDto, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "home/login";
}
return "redirect:/";
}
并将表格更改为此
<form method="POST" th:action="@{/dologin}" th:object="${loginDto}">
<div class="form-group-row">
<label> Email </label>
<input type = "text" th:field = "*{email}"/>
<span th:if="${#fields.hasErrors('email')}" th:errors = "*{email}"></span>
</div>
<div>
<label> Password </label>
<input type = "text" th:field = "*{password}"/>
</div>
<input type="submit" />
</form>
并且有效。我可以输入数据并点击提交按钮,并且我在 doLogin 方法中。但是,我想将 GET 和 POST 映射到相同的 url 以根据请求方法做不同的事情。
此外,当我最初创建表单时,我忘记指定一个 method="post" 并且在测试时它从这个表单提交了对“/login”的请求。也许是连接了一些需要取消连接的东西。
这是一个错误吗?我可以将具有不同请求方法的相同 url 映射到其他控制器方法,但这个似乎不想工作。有什么想法吗?
我已经弄明白了。映射到 POST 请求的方法的原因是因为我正在使用 spring 安全性并且它没有完全设置。 spring 安全的登录页面也映射到 /login 并且附加的
localhost/login?error
url 字符串是 spring 安全性在登录过程出现错误时附加的内容。我还没有设置 spring 安全认证,所以它认为有错误。我将继续设置 spring 安全性,但这就是我的 POST 请求未映射到 doLogin 方法的原因。
我有一个登录控制器,我已将“/login”路径映射到两种不同的方法。将调用一个用于 get,另一个用于 post.
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model){
LoginDto loginDto = new LoginDto();
model.addAttribute("loginDto", loginDto);
return "home/login";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String doLogin(@Valid LoginDto loginDto, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "home/login";
}
return "redirect:/";
}
我有百里香叶型
<form method="POST" th:action="@{/login}" th:object="${loginDto}">
<div class="form-group-row">
<label> Email </label>
<input type = "text" th:field = "*{email}"/>
<span th:if="${#fields.hasErrors('email')}" th:errors = "*{email}"></span>
</div>
<div>
<label> Password </label>
<input type = "text" th:field = "*{password}"/>
</div>
<input type="submit" />
</form>
当输入数据并点击提交时,调用 GET 请求的方法。我通过在两种方法中插入断点知道这一点。此外 url 现在在它的末尾有一个 ?errors 。我还将 url 到第二种方法的映射更改为 "doLogin" 像这样
@RequestMapping(value = "/dologin", method = RequestMethod.POST)
public String doLogin(@Valid LoginDto loginDto, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "home/login";
}
return "redirect:/";
}
并将表格更改为此
<form method="POST" th:action="@{/dologin}" th:object="${loginDto}">
<div class="form-group-row">
<label> Email </label>
<input type = "text" th:field = "*{email}"/>
<span th:if="${#fields.hasErrors('email')}" th:errors = "*{email}"></span>
</div>
<div>
<label> Password </label>
<input type = "text" th:field = "*{password}"/>
</div>
<input type="submit" />
</form>
并且有效。我可以输入数据并点击提交按钮,并且我在 doLogin 方法中。但是,我想将 GET 和 POST 映射到相同的 url 以根据请求方法做不同的事情。
此外,当我最初创建表单时,我忘记指定一个 method="post" 并且在测试时它从这个表单提交了对“/login”的请求。也许是连接了一些需要取消连接的东西。
这是一个错误吗?我可以将具有不同请求方法的相同 url 映射到其他控制器方法,但这个似乎不想工作。有什么想法吗?
我已经弄明白了。映射到 POST 请求的方法的原因是因为我正在使用 spring 安全性并且它没有完全设置。 spring 安全的登录页面也映射到 /login 并且附加的
localhost/login?error
url 字符串是 spring 安全性在登录过程出现错误时附加的内容。我还没有设置 spring 安全认证,所以它认为有错误。我将继续设置 spring 安全性,但这就是我的 POST 请求未映射到 doLogin 方法的原因。