web.servlet.PageNotFound,请求方法' GET'不支持,春天

时间:2014-10-28 09:48:08

标签: java spring spring-mvc

我在Spring MVC Controller中遇到一个奇怪的问题。

我的webapp文件夹中有四页

enter image description here

@Controller
public class WelcomeController {

    @RequestMapping(value="/wodi/welcome",method=RequestMethod.GET)
    public String welcome(){
        return "redirect:/pages/webwelcome.html";
    }
}

刚才,找到页面http://localhost:8080/pages/webwelcome.html工作得很好,但现在我有浏览器说的错误:

There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported

我不知道我做了什么影响它。

我看了WARN : org.springframework.web.servlet.PageNotFound - Request method 'GET' not supported

但这与我的情况不同,因为我正在使用" GET"方法

下面是我的Application.java来启动Spring应用程序

@Configuration
@EnableAutoConfiguration
@ComponentScan({"hello","wodinow.weixin.jaskey"})
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);

        System.out.println("Let's inspect the beans provided by Spring Boot:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

    @Bean
    public CommandService commandService(){
        return CommandService.getInstance();
    }

}

3 个答案:

答案 0 :(得分:3)

在我的情况下一切都很好。但我在控制器中遇到问题

那是我的问题     @RequestMapping(method = RequestMethod.GET)

为此改变:

@RequestMapping(value = "/usuario", method = RequestMethod.GET)

并且有效

答案 1 :(得分:1)

在您的应用程序配置中注册的ViewResolver负责解析来自给定URL的页面。

示例:用于将/welcome等URL解析为相应的JSP文件/pages/welcome.jsp

的配置
<bean
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
    value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/pages/" />
  <property name="suffix" value=".jsp" />
</bean>

但是,JSP页面是动态的,需要特殊处理。对于普通html页面等静态资源,只需为页面文件夹设置静态映射即可。

<mvc:resources location="/pages/" mapping="/**" />

这将导致文件夹/页面中的所有资源都映射到以“/”开头的URL。例如:/pages/welcome.html

可以访问http://yourdomain/welcome.html

如果您想为一个特定的URL设置视图解析器,您可以在配置中使用视图控制器:

<mvc:view-controller path="/wodi/welcome" view-name="/pages/webwelcome.html"/>

<强>更新

当您使用带有@EnableAutoConfiguration的Spring Boot时,您已经在使用第二种方法。 Here您可以在AutoConfiguration实现中看到代码段。它显示ResourceHandler已添加到网址/**,其中包含一些预定义的locations

如果您想要自定义URL映射,我建议您在普通的Spring MVC配置中使用上述方法之一。 Here是启用Spring MVC配置的文档。您可以自行决定是使用基于xml还是基于注释的配置。

答案 2 :(得分:1)

除非你在配置中添加了非常奇怪的东西,否则(嵌入式)容器应该能够提供不在WEB-INF下的静态内容或JSP。问题可能发生的唯一用例是,如果您将Spring DispatcherServlet映射到/*忘记允许提供静态资源。

您可以在我的其他帖子Match for root url and serving of static resources上找到有关提供静态资源的更多参考资料。

但通常,在控制器中,您不会重定向到HTML页面,而是提供视图的名称,并且视图解析器会找到适当的视图。