我正在尝试使用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>
请帮我解决这个问题。。提前非常感谢。。。
在Spring Boot项目中删除@EnableWebMvc注释对我来说很有效。
对我来说(spring-boot-starter父版本2.0.5.RELEASE(,它以这种方式更改路径:
src/main/resources/
/view/index.html
→src/main/resources/
META-INF/resources/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
。如果您想完全控制SpringMVC,您可以添加自己的
@Configuration
,并用@EnableWebMvc
进行注释。76.7关闭默认MVC配置
完全控制MVC配置的最简单方法是为自己的
@Configuration
提供@EnableWebMvc
注释。这样做会让所有MVC配置都掌握在您的手中。
我在春季启动应用程序中执行CURL请求时遇到了这个错误
{"时间戳":1566549840380,"状态":500,"错误":"内部服务器错误","message":"无法解析中名为"createApiKey"的视图名为"dispatcherServlet"、"path"的servlet:"/createApiKey"}
我通过从@Controller更改为@RestController(它是@Controller和@ResponseBody的组合(来修复它,如下所示:
@RestController
public class ApiKeyController {
...
@GetMapping("/createApiKey")
public DeferredResult<CreateApiKeyResp> createApiKey(@RequestParam long userId) {
...
在我的案例中,我缺少thymelaf依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在代码中定义了后缀和前缀
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";
}
}
spring引导应用程序获取jsp页面的循环视图路径更改
Changes required in application.properties
spring.thymeleaf.mode=HTML5
spring.thymeleaf.enabled=false
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
Changes in pom.xml
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>