Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc SpringMVC的正确方式是通过一个链接调用不同的方法_Spring Mvc_Model View Controller_Spring Boot - Fatal编程技术网

Spring mvc SpringMVC的正确方式是通过一个链接调用不同的方法

Spring mvc SpringMVC的正确方式是通过一个链接调用不同的方法,spring-mvc,model-view-controller,spring-boot,Spring Mvc,Model View Controller,Spring Boot,我尝试使用spring security创建登录页面。我需要实现某种类型的登录。和登录的URL必须相同。例如 我打开登录主页-localhost:8080/登录 然后我输入一些信息并按下“下一步”按钮 我移动到localhost:8080/default/login 在这个页面上,我有两种类型的登录-通过ip、通过sms、通过等。如果我按“通过ip”按钮,我需要查看url-localhost:8080/default/login 但是调用控制器方法loginByIp() 如果我按“通过短信”按钮

我尝试使用spring security创建登录页面。我需要实现某种类型的登录。和登录的URL必须相同。例如

我打开登录主页-
localhost:8080/登录

然后我输入一些信息并按下“下一步”按钮

我移动到
localhost:8080/default/login

在这个页面上,我有两种类型的登录-通过ip、通过sms、通过等。如果我按“通过ip”按钮,我需要查看url-
localhost:8080/default/login

但是调用控制器方法
loginByIp()

如果我按“通过短信”按钮,我需要查看url-
localhost:8080/default/login

但是调用控制器方法
loginBySms()

我找到了解决办法

@RequestMapping(value = "/default/login", params = "sms", method = RequestMethod.POST)
public ModelAndView sms(@RequestParam String msisdn) {
//login by sms
}

在页面的表单中,我创建了隐藏参数

<input class="form-control" name="type" value="ip" type="hidden"/>


在我打电话给你的每一张表格里

<form action="/default/login" method="post">


它起作用了。但我认为这是一种不好的做法,或者可能存在更容易或正确的一面

由于您指的是两种不同的操作,我认为最好的方法是为它们指定不同的REST端点

  • 短信:
    /default/login/by sms
  • ip:
    /default/login/by ip
然后表格看起来像:

<form action="/default/login/by-ip" method="post">...</form>
...
<form action="/default/login/by-sms" method="post">...</form>
因此,它将更容易理解/维护


否则,您的方法也会起作用。

因为您指的是两个不同的操作,我认为最好的方法是为它们指定不同的REST端点

  • 短信:
    /default/login/by sms
  • ip:
    /default/login/by ip
然后表格看起来像:

<form action="/default/login/by-ip" method="post">...</form>
...
<form action="/default/login/by-sms" method="post">...</form>
因此,它将更容易理解/维护


否则,您的方法也会起作用。

是标准方法。自然权利。但我的任务是展示同样的一面link@Matyas我同意,单一责任原则,不同的行动,不同的终点“显示相同的联系”-你这是什么意思?页面的浏览器URL可能相同,只是表单的
操作
不同,用户看不到。此外,成功登录后,您可以在两种情况下重定向到同一页面。这是标准方式。自然权利。但我的任务是展示同样的一面link@Matyas我同意,单一责任原则,不同的行动,不同的终点“显示相同的联系”-你这是什么意思?页面的浏览器URL可能相同,只是表单的
操作
不同,用户看不到。此外,成功登录后,您可以在两种情况下重定向到同一页面。
<form action="/default/login/by-ip" method="post">...</form>
...
<form action="/default/login/by-sms" method="post">...</form>
@RequestMapping(value = "/default/login/by-sms", method = RequestMethod.POST)
public ModelAndView loginBySms(@RequestParam String msisdn) {
//login by sms
}

@RequestMapping(value = "/default/login/by-ip", method = RequestMethod.POST)
public ModelAndView loginByIp(@RequestParam String msisdn) {
//login by ip
}