Я новичок в Spring. Я пытаюсь сделать что-то простое, просто заставлю spring прочитать одну из моих html-страниц. Я знаю, что это очень просто, но я уже перепробовал много руководств и не могу заставить их работать.
На изображении ниже мои папки проекта
Вот мой контроллер
package com.springbootrecipes.controllers;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@EnableAutoConfiguration
@Controller
public class RecipeController {
@RequestMapping("/ola")
public String olaa() {
return "index";
}
@RequestMapping("/")
public String ola() {
return "/index";
}
@RequestMapping("/ei")
@ResponseBody
public String ei() {
return "Um ola pra quem ta chegando";
}
}
А вот и мой основной класс
package com.springbootrecipes.springbootrecipes;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.springbootrecipes.controllers"})
public class SpringbootRecipesApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRecipesApplication.class, args);
}
}
Я также добавил свой pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<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.springboot-recipes</groupId>
<artifactId>springboot-recipes</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-recipes</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.M1</version>
</parent>
<pluginRepositories>
<pluginRepository>
<id>repository.spring.release</id>
<name>Spring GA Repository</name>
<url>https://repo.spring.io/plugins-release/</url>
</pluginRepository>
</pluginRepositories>
<repositories>
<repository>
<id>repository.spring.milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
</project>
Я создал responseBody и Spring нашел то, что там написано. но когда я пытался открыть страницу, Spring не может ее найти. Spring отображает мой класс.
2018-03-27 09:49:26.874 INFO 4047 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/ola]}" onto public java.lang.String com.springbootrecipes.controllers.RecipeController.olaa()
2018-03-27 09:49:26.875 INFO 4047 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String com.springbootrecipes.controllers.RecipeController.ola()
2018-03-27 09:49:26.876 INFO 4047 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/ei]}" onto public java.lang.String com.springbootrecipes.controllers.RecipeController.ei()
Что находится в вашем application.properties?
какой будет ответ, если вы перейдете на http://localhost:8080?
Я получил ошибку 404 -> Произошла непредвиденная ошибка (тип = Не найдено, статус = 404). Нет доступных сообщений @ansh ok, если я помещаю html-файл в статическую папку и устанавливаю путь к /index.html, он работает. Но почему я не могу использовать его в папке шаблонов? user6690200, application.properties пусто




Здесь вам нужен преобразователь представлений
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ClassLoaderTemplateResolver templateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
}
Или, если вы хотите, чтобы автозагрузка с пружинной загрузкой позаботилась об этом, используйте статер тимелеафа.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
вместо
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
статер тимелеафа позаботится о преобразователе представлений, вам не нужно определять bean-компонент viewresolver
Вы должны изменить свою зависимость thymeleaf в вашем pom.xml
Вы должны использовать зависимость, которую spring-boot предоставляет для автоконфигурации thymeleaf.
вставлять:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
вместо:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
Вы пытались сохранить свой
index.htmlв статической папке. Кроме того, вам необходимо указать полный путь, чтобы получить доступ к странице, например,/index.html.