【问题标题】:Request Post not allowed for controller, but get works控制器不允许请求发布,但可以正常工作
【发布时间】:2019-11-25 11:35:40
【问题描述】:

我有一个带 cors 的弹簧靴。我想设置一个静态页面控制器, 我想为相同的 post/get 请求返回一个静态 html 页面。

get 请求有效,但我有 post 请求: { “时间戳”:1563296215801, “状态”:405, "error": "不允许的方法", "message": "不支持请求方法 '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();
    }

}

通过 post 请求,我的断点在 'return "test";'被解雇。但是在我遇到 405 错误之后...

有什么想法吗?

【问题讨论】:

    标签: spring-boot controller


    【解决方案1】:

    您遇到了这个问题,因为除了为 /test 配置 GET 端点外,您还配置了 ViewControllerRegistry 以将视图 test 返回到 /test url。

    只要您想在不需要控制器的情况下提供静态内容,就会配置ViewControllerRegistry。因此,尝试删除它,您的控制器方法应该按预期工作,因为默认情况下ViewControllerRegistry 仅支持 GET。

    • 协助注册预先配置有状态代码和/或视图的简单自动化控制器。视图控制器注册表 注册视图控制器。
    • 我们在使用 ViewControllerRegistry 时不需要创建实际的控制器类。当我们只需要映射一个 URL
      时使用它 以期。 addViewController(String urlPath): 添加一个视图
      给定 URL 的控制器。
    • 此方法返回 ViewControllerRegistration 并使用 ViewControllerRegistration.setViewName() 对应的视图是
      映射。 addRedirectViewController(String urlPath, String
      redirectUrl):它将一个 URL 映射到另一个 URL 以在其上重定向。它有
      在 Spring 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();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2019-09-07
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多