我正在尝试使用Spring Boot来设置应用程序的主页。.但我收到错误消息,因为无法在名称为'dispatcherServlet'的servlet中解析名称为'index.html'的视图 >
我的代码如下
RunApplication.java
@SpringBootApplication
public class RunApplication {
static Logger logger = Logger.getLogger(RunNavneetApplication.class);
public static void main(String[] args) {
SpringApplication.run(RunNavneetApplication.class, args);
}
}
application.properties
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.html
HomeController.java
@Controller
public class HomeController {
@RequestMapping("/")
public String index() {
return "index";
}
}
WebConfig.java
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/productImages/**")
.addResourceLocations("file:/home/rahul/Desktop/product_images/")
.setCachePeriod(0);
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wocs</groupId>
<artifactId>REST</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<service-version>0.1.36-SNAPSHOT</service-version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.wocs</groupId>
<artifactId>services</artifactId>
<version>${service-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
请帮助我解决此问题。.非常感谢...
答案 0 :(得分:1)
对于我来说(spring-boot-starter-parent版本2.0.5.RELEASE),它以这种方式更改了路径:
src/main/resources/
WEB-INF /view/index.html
→
src/main/resources/
META-INF /资源 /view/index.html
(由于某种原因,它似乎不喜欢WEB-INF
名称,它需要嵌套的resources
目录)。
它似乎也可以用于src/main/
资源/资源 /view/index.html
在这些情况下,您甚至不需要添加@EnableWebMvc
批注并实现WebMvcConfigurer
(在application.properties
中配置的前缀和后缀就足够了。)
我在回答中还添加了对MVC配置的说明,该说明取自《 Spring Boot参考指南》:
27.1.1 Spring MVC自动配置
如果您想保留Spring Boot MVC功能并想添加其他MVC配置,则可以添加自己的
@Configuration
类型的WebMvcConfigurer
类,但不添加@EnableWebMvc
。如果要完全控制Spring MVC,可以添加自己的
@Configuration
并用@EnableWebMvc
注释。76.7关闭默认的MVC配置
完全控制MVC配置的最简单方法是为自己的
@Configuration
提供@EnableWebMvc
注解。这样做会使您掌握所有MVC配置。
答案 1 :(得分:0)
在代码中,您定义了后缀和前缀
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.html
因此,您请求中的所有页面都会自动转换为html文件,因此您需要将return "index.html";
更改为return "index";
更改为
@Controller
public class HomeController {
@RequestMapping("/")
public String index() {
return "index";
}
}
答案 2 :(得分:0)
在Spring Boot应用程序中执行CURL请求时出现此错误:
{“时间戳”:1566549840380,“状态”:500,“错误”:“内部服务器 错误”,“消息”:“无法解析名称为'createApiKey'的视图 名称为'dispatcherServlet'“,” path“:” / createApiKey“}的servlet
我通过将@Controller更改为@RestController(这是@Controller和@ResponseBody的组合)来解决的,如下所示:
@RestController
public class ApiKeyController {
...
@GetMapping("/createApiKey")
public DeferredResult<CreateApiKeyResp> createApiKey(@RequestParam long userId) {
...
答案 3 :(得分:0)
在 Spring Boot 项目中删除 @EnableWebMvc 注释对我有用。