我在Spring Boot Web应用程序中访问特定页面时收到404错误。
奇怪的是,当资源映射到不同的位置时,我没有收到该错误。
@RequestMapping(value="report", method = RequestMethod.GET)
public String getReportPage() {
return "templates/report.html";
}
工作正常
@RequestMapping(value="report/{uuid}", method = RequestMethod.GET)
public String getReportPage() {
return "templates/report.html";
}
没有。我需要我的角度服务的uuid参数,所以我不能简单地从路径中删除它。我尝试将路径变量添加到模型中;没有区别。
目录结构设置如下:
webapp
resources
...
templates
report.html
配置几乎是一个开箱即用的弹簧启动,带有一些额外的资源处理程序和一些基本的安全性:
@Configuration
public class MvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/", "file:resources/");
}
}
@Configuration
@EnableWebSecurity
class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and()
.csrf().disable();
}
}
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService());
auth.authenticationProvider(authProvider());
}
.... custom user details service and authentication provider ...
}
关于可能导致此问题的任何想法?
编辑:经过一些进一步的调查后,看起来任何超出第一级的映射都不适用于Web控制器(但其余的控制器工作得很好)。例如,带有值/ web / report的映射也不起作用。
答案 0 :(得分:0)
在查看调试消息时,我发现应用程序正在寻找错误位置的页面:
DEBUG : Looking up handler method for path /report/templates/report.html
这就是为什么只有顶级请求才有效。
更改映射:
@RequestMapping(value="report/{uuid}", method = RequestMethod.GET)
public String getReportPage() {
return "/templates/report.html";
}
修复了问题。