Ошибка разрешения шаблона [], шаблон может не существовать или может быть недоступен для любого из настроенных преобразователей шаблонов. - PullRequest
0 голосов
/ 04 ноября 2019

Ниже мой контроллер. Как вы видите, я хочу вернуть html type

@Controller
public class HtmlController {

  @GetMapping(value = "/", produces = MediaType.TEXT_HTML_VALUE)
  public Employee html() {
    return Employee.builder()
      .name("test")
      .build();
  }
}

Я изначально получил следующую ошибку:

Circular view path [login]: would dispatch back to the current handler URL [/login] again

Я исправил это, выполнив эту запись.

Теперь я получаю еще одну ошибку:

There was an unexpected error (type=Internal Server Error, status=500).
Error resolving template [], template might not exist or might not be accessible by any of the configured Template Resolvers

Может ли кто-нибудь помочь мне с , почему я должен полагаться на thymleaf для предоставления html-контента и почему я получаюэта ошибка.

1 Ответ

1 голос
/ 04 ноября 2019

почему я должен полагаться на Thymeleaf для предоставления содержимого HTML

Вы этого не делаете. Вы можете сделать это другими способами, вам просто нужно сказать Spring, что это то, что вы делаете, то есть, сообщив ему, что возвращаемое значение - это сам ответ, а не имя представления, используемого для генерации ответа.

Как указано в документации Spring :

В следующей таблице описаны возвращаемые значения поддерживаемого метода контроллера.

  • String: имя представления, которое должно быть разрешено с помощью реализаций ViewResolver и использовано вместе с неявной моделью - определяется с помощью объектов команд и @ModelAttribute методов. Метод-обработчик также может программно обогатить модель, объявив аргумент Model.

  • @ResponseBody: возвращаемое значение преобразуется с помощью реализаций HttpMessageConverter инаписано в ответ. См. @ResponseBody.

  • ...

  • Любое другое возвращаемое значение : Любоевозвращаемое значение, которое не соответствует ни одному из более ранних значений в этой таблице [...], обрабатывается как имя представления (применяется выбор имени представления по умолчанию с помощью RequestToViewNameTranslator).

Как в вашем коде объект Employee превращается в text/html? Прямо сейчас код попадает в категорию «Любое другое возвращаемое значение», и это не удается.

Вы можете, например,

  • Использовать шаблон Thymeleaf (это рекомендуемый способ) :

    @GetMapping(path = "/", produces = MediaType.TEXT_HTML_VALUE)
    public String html(Model model) { // <== changed return type, added parameter
        Employee employee = Employee.builder()
            .name("test")
            .build();
        model.addAttribute("employee", employee);
        return "employeedetail"; // view name, aka template base name
    }
    
  • Добавьте метод String toHtml() к Employee и затем выполните:

    @GetMapping(path = "/", produces = MediaType.TEXT_HTML_VALUE)
    @ResponseBody // <== added annotation
    public String html() { // <== changed return type (HTML is text, i.e. a String)
        return Employee.builder()
            .name("test")
            .build()
            .toHtml(); // <== added call to build HTML content
    }
    

    Это на самом делеиспользует встроенный StringHttpMessageConverter.

  • Использовать зарегистрированный HttpMessageConverter (не рекомендуется) :

    @GetMapping(path = "/", produces = MediaType.TEXT_HTML_VALUE)
    @ResponseBody // <== added annotation
    public Employee html() {
        return Employee.builder()
            .name("test")
            .build();
    }
    

    Это, конечно, требует написания HttpMessageConverter<Employee> реализации, поддерживающей text/html, и регистрации в Spring Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...