控制器不允许请求发布,但可以使用

时间:2019-07-16 17:01:38

标签: spring-boot controller

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

get请求有效,但是对于post请求,我有: {     “时间戳记”:1563296215801,     “状态”:405,     “错误”:“方法不允许”,     “ 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();
    }

}

对于发布请求,我的断点位于“返回“测试”;”被解雇了。但是在出现405错误之后...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您正面临这个问题,因为在配置/test的GET端点的同时,还配置了ViewControllerRegistry以将视图test返回到/test url。 / p>

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

  
      
  • 协助注册预先配置了状态代码和/或视图的简单自动化控制器。 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();
    }

}