我在Spring MVC Controller中遇到一个奇怪的问题。
我的webapp文件夹中有四页
@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();
}
}
答案 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页面,而是提供视图的名称,并且视图解析器会找到适当的视图。