Spring MVC以正确的方式通过一个链接调用不同的方法

时间:2016-07-19 10:00:26

标签: spring-mvc model-view-controller spring-boot

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

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

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

我转到localhost:8080/default/login

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

但是在控制器方法loginByIp();

中调用

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

但是在控制器方法loginBySms();

中调用

我找到了解决方案

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

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

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

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

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

我打电话给每个表格

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

有效。但我认为它是糟糕的practik或可能存在更容易或正确的一面。

1 个答案:

答案 0 :(得分:0)

由于您指的是两种不同的操作,我认为最好的方法是为它们分配不同的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>

处理程序清晰地映射:

@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
}

因此,理解/维护会更容易。

否则你的方法也会起作用。

相关问题