Spring Boot:无法解析名称为“ dispatcherServlet”的servlet中名称为“ index”的视图

时间:2018-07-12 10:36:40

标签: spring-boot servlets

我正在尝试使用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>

请帮助我解决此问题。.非常感谢...

4 个答案:

答案 0 :(得分:1)

对于我来说(spring-boot-starter-parent版本2.0.5.RELEASE),它以这种方式更改了路径:

src/main/resources/ WEB-INF /view/index.htmlsrc/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 注释对我有用。