当前位置: 首页 > 知识库问答 >
问题:

Spring Boot控制器中不支持请求方法“GET”

宗冠宇
2023-03-14

我有以下代码

@Controller
@RequestMapping("/recipe")
public class RecipeController {
private IRecipeService recipeService;

@Autowired
public RecipeController(IRecipeService recipeService) {
    this.recipeService = recipeService;
}

@GetMapping("/{id}/show")
public String showById(@PathVariable String id, Model model) {

    model.addAttribute("recipe", recipeService.findById(Long.valueOf(id)));

    return "recipe/show";
}
@GetMapping("/{id}/update")
    public String updateRecipe(@PathVariable String id, Model model) {
        model.addAttribute("recipe", recipeService.findCommandById(Long.valueOf(id)));

    return "recipe/recipeform";
}

@PostMapping("/")
public String saveOrUpdate(@ModelAttribute RecipeCommand command) {
    RecipeCommand savedCommand = recipeService.saveRecipeCommand(command);

    return "redirect:/recipe/" + savedCommand.getId() + "/show";
}}

现在,当我去http://localhost:8080/recipe/2/update,点击提交,我调用@PostMap方法,更新后重定向我到返回重定向:/配方/"savedCommand.getId()"/show";

但是我在控制台上发现了这个错误

Resolved exception caused by Handler execution: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported

这个在网上

There was an unexpected error (type=Method Not Allowed, status=405). Request method 'GET' not supported

当我将@PostMap更改为@Request estMap或添加额外的@GetMaap时,一切正常

有人能解释一下吗?或者我该怎么做才能让@PostMapping按预期工作。

更新:如下面的评论所述,我们可以直接在SpringData中使用@PathVariablehttps://stackoverflow.com/a/39871080/4853910

共有1个答案

陆昂然
2023-03-14

我想你必须更改HTML中的表单,使其在提交时使用POST,而不是GET:这样做吧

<代码>

至少屏幕截图似乎显示了提交HTML表单后来自浏览器的提交请求,并在那里显示这是一个GET请求(所有表单字段都是请求参数)。

所以Spring是对的:URL("/配方/? id=2

你能在这里发布带有的超文本标记语言片段吗?

 类似资料:
  • 我刚刚开始学习Java Spring Boot for REST API开发。在下面的代码中,GET方法可以正常工作,但POST不能。 在Postman应用程序中使用as 错误 在日志中我可以看到, maven的Java和springboot版本,

  • 我正在使用一个表单,当我点击提交时,它会点击下面的控制器。 我知道这个方法被击中了,因为我在其中放置了断点。然而,我仍然得到了上面提到的错误。 编辑:我已经发布了整个控制器,而不仅仅是方法。 Edit2:我的html表单如下: 我错过了什么?非常感谢任何帮助。

  • 我有一个小型spring应用程序,如下所示: 我已经生成了这个应用程序的一个jar,并将其停靠,如下所示: 然后运行下面的命令运行docker容器 问题是,当我这样做我得到一个错误说: org.springframework.web.请求方法'GET'不支持 然而,当我在本地运行spring应用程序(不停靠它)并从JMeter发送请求时,请求成功发送。 我做错了什么?

  • 我正在处理一个java springboot项目和rest api,我需要在其中一个uri中传递参数,当我使用它时,我会遇到“request method GET not supported”错误 当我使用时它工作正常 但我需要url有“?”在传递参数之前,所以当我替换 用这个 我得到get方法不受支持的错误。

  • 我正在编写一个控制器来处理来自AJAX的帖子。我一直收到一个错误,那篇文章不受支持。我以前在尝试创建后控制器方法时从未遇到过以下错误,我希望有人能发现我在哪里搞砸了。 这是我为控制控制器中的帖子而编写的方法: 使用JQuery 1.10,这是请求它的Ajax调用: 我知道POST地址是正确的,因为将它转换成GET请求就可以了。此外,我还编写了其他POST请求,它们在同一个控制器类中也能正常工作。任

  • login.jsp 用户列表.jsp AppController.java 有2页:login.jsp-起始页,其中包括与登录和密码填充的形式-userlist.jsp结果列表“显示数据库中所有用户持久化”..首先显示登录页面,当我单击提交按钮时,我得到了这个错误:org . spring framework . web . servlet . pagenotfound-不支持请求方法“POST”