Переслать на статическую HTML-страницу из контроллера - PullRequest
6 голосов
/ 29 октября 2010

В моем весеннем mvc-приложении есть один единственный ContentNegotiatingViewResolver, который определяет JsonView для рендеринга резонансов json:

<mvc:annotation-driven/>

<context:component-scan base-package="world.domination.test"/>

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json"/>
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="com.secondmarket.connector.springmvc.MappingJacksonJsonViewEx"/>
        </list>
    </property>
</bean>

Все приложение находится на корневом URL-адресе "myapp". Все работает как мне нужно.

Первый вопрос : как вернуть статическую HTML-страницу при доступе к определенному URL? Скажем, при доступе к Spring uri / myapp / test я хотел бы отобразить html-страницу /TestStuff.html, которая находится в корневой папке webapp.

Я пошел дальше и написал простой контроллер:

@Controller
@RequestMapping("test")
public class TestConnector {

    @Autowired
    private RestTemplate tpl;

    @RequestMapping(method = RequestMethod.GET)
    public String get() {
        return "/TestStuff.html";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String post(@RequestParam("url") String url, @RequestParam("data") String data) {
        return tpl.postForObject(url, data, String.class, new HashMap<String, Object>());
    }
}

Предполагается, что метод get () сообщает Spring для визуализации TestStuff.html, но вместо этого я получаю ошибка, связанная с отсутствием представления с именем "/TestStuff.html".

Второй вопрос - как избежать необходимости добавлять расширение к URL. В моем примере, когда я использую / myapp / test вместо / myapp / test.html , мой ContentNegotiatingViewResolver использует представление json, которое отображает {} (пустые фигурные скобки)

Любые указатели высоко ценятся.

Ответы [ 3 ]

6 голосов
/ 18 ноября 2010

Вместо того, чтобы возвращать "/TestStuff.html" из вашего контроллера, попробуйте вернуть "redirect: /TestStuff.html".

Другой вариант - создать и зарегистрировать распознаватель для ваших статических страниц. Возможно, что-то вроде этого:

<bean id="staticViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="prefix" value="/WEB-INF/static/"/>
    <property name="suffix" value=".html"/>
</bean>
0 голосов
/ 19 апреля 2014

tutorialspoint имеет хороший полный пример этого: http://www.tutorialspoint.com/spring/spring_static_pages_example.htm

0 голосов
/ 13 октября 2012

Лучший способ сделать это - использовать InternalResourceViewResolver в сочетании с тегом mvc: view-controller (подробности см. В соответствующем справочном руководстве Spring). Просто включите следующее в XML-файл контекста приложения (в этом случае ваш статический файл TestStuff.html будет находиться в каталоге / WEB-INF / static-pages):

<bean>
    <bean id="staticPagesViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/static-pages/"/>
    <property name="suffix" value=".html"/>
</bean>

<mvc:view-controller path="/test" view-name="TestStuff"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...