最近修改控制器的api为REST风格,修改用户信息用put方法,在前端html页面form表单中添加hidden
<form th:action="@{/user}" method="post"> <input type="hidden" name="_method" value="put">添加完成之后,点击提交,发现用户信息没修改,控制台显示调用了新增用户的方法,以下是新增和修改用户的代码
@PostMapping(value="user") public String addUser(User user){ System.out.println("添加用户"); userService.addUser(user); return "redirect:/users"; } @PutMapping(value="user") public String updateUser(User user){ System.out.println("修改用户"); userService.updateUser(user); return "redirect:/users"; }注释掉addUser方法之后,点击修改报错
There was an unexpected error (type=Method Not Allowed, status=405). Request method 'POST' not supported org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:201) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:421) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:449) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:67) at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:393)看报错信息,请求是以POST方式提交的,说明HiddenHttpMethodFilter没有生效,到WebMvcAutoConfiguration类中查看源码,找到HiddenHttpMethodFilter的配置:
@Bean @ConditionalOnMissingBean(HiddenHttpMethodFilter.class) @ConditionalOnProperty(prefix = "spring.mvc.hiddenmethod.filter", name = "enabled", matchIfMissing = false) public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { return new OrderedHiddenHttpMethodFilter(); }这句话的意思就是如果不配置的话,默认不加载此类 上网查资料的时候,都说SpringBoot给我们自动配置好了HiddenHttpMethodFilter 楼主SpringBoot版本是2.2.0,可能是版本高了之后默认配置改了的原因。
重启项目,点击修改,进入updateUser方法。
