spring-boot - 控制器不允许请求发布,但可以正常工作
问题描述
我有一个带cors的弹簧靴。我想设置一个静态页面控制器,我想为相同的 post/get 请求返回一个静态 html 页面。
获取请求有效,但我有发布请求:{“时间戳”:1563296215801,“状态”:405,“错误”:“方法不允许”,“消息”:“不支持请求方法'POST'”, “路径”:“/测试”}
我的代码:
@Controller
@RequestMapping("/")
public class StaticPageController implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/test").setViewName(
"test");
}
@RequestMapping(value = "test", method = { RequestMethod.GET,
RequestMethod.POST })
public String test() {
return "test";
}
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("folder/");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
通过发布请求,我的断点在'return "test";' 被解雇。但是在我遇到405错误之后......
有任何想法吗 ?
解决方案
您正面临这个问题,因为除了配置 GET 端点之外/test
,您还配置了ViewControllerRegistry
将视图返回test
到/test
url。
ViewControllerRegistry
每当您想要在不需要控制器的情况下提供静态内容时都会配置。因此,尝试删除它,您的控制器方法应该按预期工作,因为默认情况下仅支持 GET ViewControllerRegistry
。
- 协助注册预先配置有状态代码和/或视图的简单自动化控制器。ViewControllerRegistry 注册视图控制器。
- 使用 ViewControllerRegistry 时,我们不需要创建实际的控制器类。当我们只需要将 URL 映射到
视图时使用它。addViewController(String urlPath):它
为给定的 URL 添加一个视图控制器。- 此方法返回 ViewControllerRegistration 并使用 ViewControllerRegistration.setViewName()
映射相应的视图。addRedirectViewController(String urlPath, String
redirectUrl):它将一个 URL 映射到另一个 URL 以在其上重定向。它已
在春季 4.1 中引入。- addStatusController(String urlPath, HttpStatus statusCode):它用给定的状态码映射一个 URL。它也在春季 4.1 中引入。
尝试使用:
@Controller
@RequestMapping("/")
public class StaticPageController implements WebMvcConfigurer {
@RequestMapping(value = "test", method = { RequestMethod.GET,
RequestMethod.POST })
public String test() {
return "test";
}
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("folder/");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
推荐阅读
- mysql - 如何从有条件的 3 个表中加入
- html - 你如何让一个弹性项目填满剩余的空间?
- c# - c# 7.3 ValueTuple - 解构后检查默认值
- python - 在特定时间戳上调用 python 函数
- python - 用 Beautiful Soup 解析 html 文档
- firebase - Firestore 安全规则真的像意大利面条吗?
- python - 在 gcloud “ImportError: No module named MySQLdb._mysql”上运行 dev_appserver.py 时出错?
- javascript - API 请求适用于邮递员,但不适用于 Node.js(请求)
- python - sqlite 数据库文件不可读的符号
- mediawiki - 自定义加载 MediaWiki 皮肤脚本