Контроллер Thymeleaf не отображается - PullRequest
0 голосов
/ 19 июня 2020

ОБНОВЛЕНИЕ: переключил аннотацию с @RestController на @Controller, и теперь я просто получаю 404 при попытке нажать http://localhost: 8080 / api / v1 / create_short_url . Я добавил System.out.println в контроллер и вижу, как он распечатывается, поэтому я знаю, что он попадает в контроллер. Думаю, он просто не может найти шаблон.

@Controller 
@RequestMapping("/api/v1") 
public class UrlShorteningController {

    @GetMapping("/create_short_url")
public String newShortUrl(Model model) {
    System.out.println("^^^^^^^");
    model.addAttribute("longUrl",
        new String());
    return "new-short-url-form";
}

Запрос enter image description here


У меня есть контроллер, который, как я ожидаю, отобразит шаблон HTML. Вместо этого он просто возвращает имя контроллера. Что я здесь делаю не так?

Фактическое : Actual

Ожидаемое : Отображение страницы html

Код

enter image description here

Контроллер в src / main / java / com / example / urlshortener / api / UrlShorteningController. java:

@RestController
....
@GetMapping("/create_short_url")
public String newShortUrl(Model model) {
    model.addAttribute("longUrl",
        new String());
    return "new-short-url-form";
}

build.gradle:

... 
dependencies {
...
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
...
}

Шаблон Thymeleaf в src / main / resources / templates / new-short-url-form. html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>New Short Url</title>
</head>
<body>
<form method="POST" th:action="@{/create_short_url_thymeleaf}" th:object="${String}">
    <h1>Enter a url to shorten</h1>
    <input type="text" id="longUrl" th:field="*{String}"/>
</form>
</body>
</html>

Ответы [ 4 ]

1 голос
/ 19 июня 2020

Шаблон Thymeleaf в src / resources / templates / new-short-url-form. html

Путь для шаблонов должен быть src / main / ресурсы / шаблоны /

0 голосов
/ 29 июня 2020

Попробуйте использовать ModelAndView

@Controller 
@RequestMapping("/api/v1") 
public class UrlShorteningController {

    @GetMapping("/create_short_url")
public ModelAndView newShortUrl() {
 ModelAndView modelAndView = new ModelAndView();
    System.out.println("^^^^^^^");
modelAndView.addObject("longUrl",
        new String());
modelAndView.setViewName("new-short-url-form")
return modelAndView;
}

И замените свой тег html на <html lang="en" xmlns:th="http://www.thymeleaf.org">

0 голосов
/ 19 июня 2020

Вы используете GetMapping вместо RequestMapping. Используйте RequestMapping, если вы планируете предоставить шаблон. GetMapping предназначен только для запроса на получение, который объясняет, почему вы получаете буквальную строку, а не шаблон.

0 голосов
/ 19 июня 2020

Я понял, что мой редактор не улавливает имя представления. Понятия не имею, почему, поскольку структура папок казалась правильной. Я попытался переименовать его в «some-form», и он внезапно сработал. Не уверен, есть ли ограничение на длину html имен файлов.

enter image description here

...