【问题标题】:"Request method 'POST' not supported" when I try to save Person due to <form method="POST">由于 <form method="POST"> 我尝试保存 Person 时出现“不支持请求方法 'POST'”
【发布时间】:2022-01-20 02:13:04
【问题描述】:

可能出错的控制器方法:

这里我用

@GetMapping("/create") public ModelAndView create() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("/create.jsp"); return modelAndView; }

这是 create.jsp

<%@ page isELIgnored="false"%>
<%@ page contentType="text/html; charset=UTF-8" %>

<html>
<head>
    <title>Create</title>
</head>
    <body>
        <h1>Create author</h1>
        <form method="POST" action="">
            Id <input name="userId"> <br>
            Last name: <input name="lastName"> <br>
            First name: <input name="firstName"> <br>
            Second name: <input name="secondName"> <br>
            Phone: <input name="phone"> <br>
            Hobby: <input name="hobby"> <br>
            BitBucketUrl: <input name="bitBucketUrl"> <br>
            <input type="submit" value="Create">
        </form>
    </body>
</html>

最后是@Postmapping 方法

    @PostMapping
    public ModelAndView createPerson(
    @RequestParam("id") String id,
    @RequestParam("lastName") String lastName, 
    @RequestParam("firstName") String firstName, 
    @RequestParam("secondName") String secondName, 
    @RequestParam("phone") String phone, 
    @RequestParam("hobby") String hobby, 
    @RequestParam("bitBucketUrl") String bitBucketUrl) {
    
            personCache.create(Person.builder()
                    .setId(id)
                    .setFirstName(firstName)
                    .setLastName(lastName)
                    .setSecondName(secondName)
                    .setPhone(phone)
                    .setHobby(hobby)
                    .setBitBucketUrl(bitBucketUrl)
                    .build());
    
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("id", id);
            modelAndView.addObject("lastName", lastName);
            modelAndView.addObject("firstName", firstName);
            modelAndView.addObject("secondName", secondName);
            modelAndView.addObject("phone", phone);
            modelAndView.addObject("hobby", hobby);
            modelAndView.addObject("bitBucketUrl", bitBucketUrl);
            modelAndView.setViewName("/all.jsp");
            return modelAndView;
        }

页面 all.jsp 正在工作(在方法 @GetMapping("/all") 中实现)。

我想,当按下“创建”按钮时,转到“/all”页面,在那里我可以看到一个新的人。但是我在终端中出现错误“不支持请求方法'POST'”,在浏览器中出现错误“type=Method Not Allowed,status=405”。

我还创建了默认页面 index.jsp,并在 @PostMapping 方法中尝试 modelAndView.setViewName("/index.jsp"),但不幸的是,即使在这种情况下,当我推送“创建”浏览器时也不会转到index.jsp

【问题讨论】:

  • 您的浏览器会接到电话,而不是帖子。

标签: java spring spring-boot


【解决方案1】:

默认情况下浏览器只做get-requests,所以创建另一个带有get-mapping的控制器方法并将person对象添加到模型中,这样你就可以在视图页面中设置值,当你按下提交时给出post-mapping,这样你可以将在视图页面中输入的值分配给人员对象。

【讨论】:

  • 谢谢,问题解决了一半。我使用显示“create.jsp”的 get-mapping 创建了一个控制器方法。然后,我创建了一个带有后映射的控制器方法,其中创建了一个 Person。当我按下“创建”按钮时,我在终端中发现一个错误:不支持请求方法“POST”。我们可以去私人聊天,我可以把我的代码发给你吗?
  • 只需在答案部分发布该错误或编辑您的问题。
【解决方案2】:

浏览器地址栏发送 GET 请求。 您可以像 Postman 一样使用 smth 来发送您需要的请求。

【讨论】:

  • 是的,邮递员可以发送邮递请求。我原以为浏览器可以发送 post 请求...大声笑所以,我可以从 jsp 发送 post 请求 "
    " ?
【解决方案3】:

尝试为表单标记提供除 root 以外的任何其他操作,并在映射后也提供相同的操作。

【讨论】:

  • 我尝试了例如 action="all" 或 action="/all"、@PostMapping("/all") 或 @PostMapping("all")。解决不了问题。
【解决方案4】:

在 create.jsp 中我是这样写的:

Id <input name="userId"> <br>

在@PostMapping 中

ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("id", id)

普通的注意力不集中

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多