我有以下代码
@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并点击提交时,我会调用 @PostMapping 方法,在更新时将我重定向到
return "redirect:/recipe/" + 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
当我将@PostMapping更改为@RequestMapping或添加其他@GetMaapping时,一切正常
任何人都可以解释这个或我能做些什么,以便@PostMapping按预期工作。
更新:如下面的评论中所述 - 我们可以在SpringData中直接使用@PathVariable https://stackoverflow.com/a/39871080/4853910
答案 0 :(得分:1)
我猜你必须更改HTML中的FORM,以便在提交时使用POST,而不是GET:这样做
<form method="post" ...>
至少截图似乎在提交HTML FORM后显示来自浏览器的提交请求, 它显示它是一个GET请求(所有表单字段都作为请求参数)。
所以spring是正确的:URL(“/ recipe /?id = 2&amp; description = Spicy ...”)只匹配saveAndUpdate()的Mapping,对于这个方法,你只注释了“POST”,因此:控制器中的“/ recipe /?id = 2&amp; description = Spicy ...”上的GET没有匹配。
你能在这里发布带有HTML的HTML片段吗?
<FORM>...</FORM>
一部分?