«1. Обзор

В этом руководстве мы хотим посмотреть, как вернуть HTML из контроллера Spring MVC.

Давайте посмотрим, что нужно сделать.

2. Зависимость Maven

Во-первых, мы должны добавить зависимость Maven spring-boot-starter-web для нашего контроллера MVC:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <versionId>1.3.7.RELEASE</versionId>
</dependency>

3. Контроллер

Далее давайте создадим наш контроллер:

@Controller
public class HtmlController {
    @GetMapping(value = "/welcome", produces = MediaType.TEXT_HTML_VALUE)
    @ResponseBody
    public String welcomeAsHTML() {
        return "<html>\n" + "<header><title>Welcome</title></header>\n" +
          "<body>\n" + "Hello world\n" + "</body>\n" + "</html>";
    }
}

Мы используем аннотацию @Controller, чтобы сообщить DispatcherServlet, что этот класс обрабатывает HTTP-запросы.

Затем мы настраиваем нашу аннотацию @GetMapping для создания вывода MediaType.TEXT_HTML_VALUE.

И, наконец, аннотация @ResponseBody сообщает контроллеру, что возвращаемый объект должен быть автоматически сериализован в настроенный тип носителя, то есть TEXT_HTML_VALUE или text/html.

Без этой последней аннотации мы бы получили ошибку 404, поскольку возвращаемое значение String по умолчанию относится к имени представления.

С этим контроллером мы можем протестировать его:

curl -v localhost:8081/welcome

Вывод будет выглядеть примерно так:

> ... request ...
>
< HTTP/1.1 200
< Content-Type: text/html;charset=UTF-8
< ... other response headers ...
<

<html>
<header><title>Welcome</title></header>
<body>
Hello world
</body>
</html>

Как и ожидалось, мы видим, что Content-Type ответа — text/ HTML. Кроме того, мы видим, что ответ также имеет правильный HTML-контент.

4. Заключение

В этой статье мы рассмотрели, как вернуть HTML из контроллера Spring MVC.

Как всегда, образцы кода доступны на GitHub.