Ich möchte eine einfache HTML-Seite vom Controller zurückgeben, bekomme aber nur den Namen der Datei und nicht deren Inhalt. Warum?
Dies ist mein Controller-Code:
@RestController
public class HomeController {
@RequestMapping("/")
public String welcome() {
return "login";
}
}
Dies ist meine Projektstruktur:
[
Bei Verwendung von @RestController
wie folgt:
@RestController
public class HomeController {
@RequestMapping("/")
public String welcome() {
return "login";
}
}
Dies ist das Gleiche wie Sie es bei einem normalen Controller tun:
@Controller
public class HomeController {
@RequestMapping("/")
@ResponseBody
public String welcome() {
return "login";
}
}
Die Verwendung von @ResponseBody
gibt return "login";
als String-Objekt zurück. Jedes Objekt, das Sie zurückgeben, wird im HTTP-Body als payload
als JSON angehängt.
Aus diesem Grund erhalten Sie in der Antwort nur login
.
Befolgen Sie die folgenden Schritte
retunrn "index"
Zurückgeben.Berücksichtigen Sie die folgenden Abhängigkeiten.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>`
Die Antwort von Kukkuz hat für mich nicht funktioniert, bis ich diese Abhängigkeit in die POM-Datei eingefügt habe:
<!-- Spring boot Thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Aus dem Führer hier .
Sowie Aktualisierung der Registrierungsressourcen wie beschrieben hier .
Dann hat es gut funktioniert. Wenn jemand in der Zukunft auf dasselbe Problem stößt und nach der ersten Antwort Ihr Problem nicht löst, befolgen Sie diese zwei weiteren Schritte, nachdem Sie den Code in @ Kukkuz 'Antwort verwendet haben, und prüfen Sie, ob dies einen Unterschied macht.
Ersetzen Sie @RestController
durch @Controller
.
Sie können versuchen, ModelAndView
zu verwenden:
@RequestMapping("/")
public ModelAndView index () {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
@Restcontroller durch @ Controller ersetzen. @ Restcontroller gibt nur Inhalte zurück, nicht HTML- und JSP-Seiten.
Das String
, das Sie hier zurückgeben:
return "login";
Ist eigentlich der gesamte Inhalt , den Sie an den Browser zurücksenden.
Wenn Sie den Inhalt einer Datei zurücksenden möchten, ist eine Möglichkeit:
Sie können damit fortfahren Beantworten Sie die Frage Spring Boot Service, um eine Datei herunterzuladen
Die korrekteste und modernste Form ist, IoC
zu verwenden, um Abhängigkeiten in die Endpunktmethode einzufügen, wie zum Beispiel die thymeleafModel
-Instanz ...
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(
@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
// returns the already proccessed model from src/main/resources/templates/greeting.html
}
}
Das vollständige Beispiel finden Sie unter: https://spring.io/guides/gs/serving-web-content/
Sie erhalten nur den Namen, weil Sie nur den Namen return "login";
zurückgeben. Es ist @RestController
und dieser Controller gibt Daten statt einer Ansicht zurück. Aus diesem Grund erhalten Sie nur Inhalte, die Sie von method zurückgeben.
Wenn Sie view mit diesem Namen anzeigen möchten, müssen Sie Spring MVC verwenden, siehe dieses Beispiel .
Sie sollten login.html
verwenden. Und ersetzen Sie RestController
durch Controller
Ich verwende Thymeleaf nicht und die einzige Möglichkeit, mit der es für mich funktionierte, war @Controller
in der Klasse und
@RequestMapping(method = RequestMethod.GET, value = "/")
public String index() {
return "index.html";
}