2015-02-25 2 views
3

Так что я пытаюсь следовать этому руководству о том, как служить HTML-файлы с Spring: http://spring.io/guides/gs/serving-web-content/Spring не служит HTML файла

У меня есть точно такая же структура папок с точно такими же файлами, но при запуске сервера пружинных загрузочного , мой localhost:8080/greeting будет показывать только строку greeting, которая возвращается с GreetingController, и все, если я смотрю на исходный код страницы, в нем нет html.

Я не мог найти ответы на подобные вопросы, потому что все аналогичные ответы по-прежнему используют Spring с именем .xml, где вы объявляете представления в XML-файле. Но в этом руководстве явно говорится, что не нужно использовать .xml. Он должен просто так работать.

Mapping:

@RestController 
public class GreetingController { 

    @RequestMapping("/greeting") 
    public String greeting(@RequestParam(value="name", required = false, defaultValue="World") String name, Model model) { 
     model.addAttribute("name", name); 
     return "greeting"; 
    } 
} 

Использование @Controller бросает ошибку:

2015-02-25 14:50:14.830 ERROR 2378 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [greeting]: would dispatch back to the current handler URL [/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause 

javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.) 

EDIT:

Решение: а) Используйте @Controller вместо @RestController б) При запуске приложения в IntelliJ, убедитесь, что вы создали задачу Gradle, которая запускается до выполнения класса Main.

+0

внимательно прочитайте, вы найдете ответ. – vvp

+0

контроллер возвращает вид, и это показано вам как html-файл. – vvp

+1

Опубликуйте свое сопоставление в контроллере. Это похоже на статью? '@RequestMapping ("/greeting ") public String greeting (@RequestParam (значение =" name ", required = false, defaultValue =" World ") Имя строки, модель модели) { model.addAttribute (" name ", name); возвращение «приветствие»; } ' –

ответ

5

Вы используете @RestController (documentation) вместо @Controller.

A convenience annotation that is itself annotated with @Controller and @ResponseBody.

И @ResponseBody просто вернуться к абоненту независимо метод возвращает, струнный greeting в вашем случае.

Что касается исключения пути Circular view, которое вы получаете, это, вероятно, связано с ViewResolver s. Из весенней загрузки docs

There are many implementations of ViewResolver to choose from, and Spring on its own is not opinionated about which ones you should use. Spring Boot, on the other hand, installs one or two for you depending on what it finds on the classpath and in the application context

Таким образом, в зависимостях, вероятно, чего-то не хватает. У вас установлена ​​настройка spring-boot-starter-thymeleaf?

+1

Это не имеет значения. См. Http: // stackoverflow ,com/questions/25242321/difference-between-spring-controller-and-restcontroller-annotation – Kaspar

+0

Собственно, это именно то, что важно, из-за '@ ResponseBody' –

+0

Отредактировано мое сообщение. Использование @Controller вызывает ошибку при загрузке страницы. – Kaspar

4

Добавили ли вы следующую зависимость в свой pom.xml?

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency> 
+0

Почему, когда я обслуживаю простые .html не шаблоны тимелеафа? – Kaspar

+0

В руководстве, которое вы указали по адресу http://spring.io/guides/gs/serving-web-content/, используется тимелеар, поэтому я предположил, что вы используете шаблон тимелеафа. –