web-dev-qa-db-fra.com

Le contrôleur de repos de printemps ne renvoie pas le code HTML

J'utilise une botte à ressort 1.5.2 et mon contrôleur de repos à ressort ressemble à ceci

@RestController
@RequestMapping("/")
public class HomeController {

    @RequestMapping(method=RequestMethod.GET)
    public String index() {
        return "index";
    }

}

quand je vais sur http: // localhost: 8090/assessment/ il parvient à mon contrôleur mais ne renvoie pas mon index.html, qui est dans un projet maven sous src/main/resources ou src/main/resources /statique. Si je vais à cette URL http: // localhost: 8090/assessment/index.html , elle renvoie mon index.html. J'ai regardé ce tutoriel https://spring.io/guides/gs/serving-web-content/ et ils utilisent thymeleaf. Dois-je utiliser thymeleaf ou quelque chose de similaire pour que mon contrôleur de ressort de rappel me rende la vue?

Ma classe d'application ressemble à ceci

@SpringBootApplication
@ComponentScan(basePackages={"com.pkg.*"})
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

Lorsque j'ajoute la dépendance thymeleaf à mon chemin de classe, j'obtiens cette erreur (code de réponse 500)

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers

Je suppose que j'ai besoin de thymeleaf? Je vais essayer de le configurer correctement maintenant.

Cela fonctionne après avoir changé ma méthode de contrôleur pour retourner index.html comme ceci

@RequestMapping(method=RequestMethod.GET)
public String index() {
    return "index.html";
}

Je pense que Thymeleaf ou un logiciel comme celui-ci vous permet de ne pas utiliser l'extension du fichier, mais vous n'en êtes pas sûr.

5
gary69

Votre exemple ressemblerait à ceci:

Votre méthode de contrôleur avec votre itinéraire "évaluation"

@Controller
public class HomeController {

    @RequestMapping(value = "/assessment", method = RequestMethod.GET)
    public String index() {
        return "index";
    }

}

Votre modèle Thymeleaf dans "src/main/resources/templates/index.html"

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p>Hello World!</p>
</body>
</html>
5
karelp90

L'annotation RestController renvoie le json de la méthode, pas HTML ou JSP. Il s’agit de la combinaison de @Controller et @ResponseBody. @RestController a pour objectif principal de créer des services Web RESTful. Pour renvoyer html ou jsp, annotez simplement la classe de contrôleur avec @Controller.

18
Suresh A

Veuillez trouver ce lien pour plus de détails dans documentation thymeleaf

et error come becoz vous ne pouvez pas configurer le résolveur de vues conformément à la classe "springcofigrationaddapter" make MvcConfig (il est nécessaire d’ajouter un résolveur de vues) et user @controller
si vous souhaitez taper json (comme projet AnjularJs) utilisez @RestController)

1
Lalith Kahatapitiya

J'ai résolu ce problème en supprimant l'annotation @EnableWebMvc de la classe de configuration.

Spring MVC Auto-configuration fournit une prise en charge statique de index.html.

Si vous voulez prendre le contrôle complet de Spring MVC, vous pouvez ajouter votre @Configuration propre annoté avec @EnableWebMvc.

Obtenez plus de détails sur Spring MVC Auto-configuration .

0
W.Man