首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >POST和GET用于相同的URL - Controller - Spring

POST和GET用于相同的URL - Controller - Spring
EN

Stack Overflow用户
提问于 2018-05-19 21:11:45
回答 3查看 2.8K关注 0票数 3

我有这个控制器:

代码语言:javascript
复制
@Controller
public class HelloWorldController {

    @RequestMapping("/hello.html")
    public ModelAndView helloWorld() {

        String message = "Hello World, Spring 3.0!";
        return new ModelAndView("hello", "message", message);
    }

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String viewLogin(Map<String, Object> model) {
        User user = new User();
        model.put("userForm", user);
        return "LoginForm";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String doLogin(@Valid  @ModelAttribute("userForm")  User userForm,
            BindingResult result, Map<String, Object> model) {

        if (result.hasErrors()) {
            return "login";
        }

        return "LoginSuccess";
    }
}

我有两个方法,对于相同的url /login有不同的http方法,所以当单击第一个url 'localhost:8080/project_name/login‘时,第一个带有GET的方法将被处理,并将我重定向到/LoginForm

因此,根据我的理解,第二个方法处理程序将不会被执行,因为对/login的请求总是使用GET.

如果我的理解是错误的,请向我解释如何执行第二种方法,谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-05-19 21:29:05

我认为这就是你感到困惑的地方。之所以是GET,是因为默认情况下浏览器会调用GET。如果您想调用第二个方法,您可能需要编写一个定制的表单/ JSP页面,或者签出postman来将HTTP方法设置为POST。

您还可以从命令行使用curl:

代码语言:javascript
复制
$ curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data

如果您希望能够从浏览器本身发出POST调用,请查看以下浏览器附加组件:firefoxchrome

如果您不喜欢浏览器中的扩展,请使用以下文本创建一个书签并使用它:

path javascript:var%20my_params=prompt("Enter%20your%20parameters","var1=aaaa&var2=bbbbb");%20var%20Target_LINK=prompt("Enter%20destination",path);%20Function%20POST(path,%20params)%20{%20%20%20var%20xForm=%20document.createElement("form");%20%20%20xForm.setAttribute("method",%20"post");%20%20%20xForm.setAttribute("action",%20path);%20Function%20PATH(

javascript:var%20my_params=prompt(“Enter%20your%20parameters”,“var1=aaaa&var2=bbbbb”);%20var%20Target_LINK=prompt(“Enter%20destination”,%20location.href);%20function%20post(path,path%20Path);%20%20%20%20%20%20%20%20%20xForm.appendChild(hiddenField);%20%20%20%20%20}%20%20%20}%20%20%20document.body.appendChild(xForm);%20%20xForm.submit();%20}%20%20%20parsed_params={};%20my_params.split("&").forEach(function(item)%20{var%20s%20=%20item.split("="),%20k=s,%20v=s1

票数 3
EN

Stack Overflow用户

发布于 2018-05-19 21:36:06

浏览器对url localhost:8080/project_name/login的命中将是一个GET调用;因此将执行您的第一个/login GET方法。

要执行第二个方法,可以从任何Rest客户端调用POST,如PostManARC等。

票数 1
EN

Stack Overflow用户

发布于 2018-05-21 20:24:23

click here

浏览器默认选择GET方法。因此,如果你尝试一下postman,你就会看到不同之处。您可以选择GET / POST。对于实时,他们也会从UI中提到具体的GET请求/ Post请求,所以不用担心。

你可以用邮递员找个更好的办法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50425667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档