Не разрешать вид в приложении RESTful - PullRequest
5 голосов
/ 06 декабря 2011

Я создаю веб-приложение с веб-сервисами RESTful, используя Spring MVC 3. Веб-сервисы будут использоваться приложениями, поэтому никогда не следует разрешать какие-либо запросы к представлению. Есть ли способ указать в контексте сервлета, что никакие запросы не должны разрешаться ни к какому представлению?

На данный момент у меня есть:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

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

Причина, по которой меня это беспокоит, заключается в том, что журналы моего приложения будут заполнены следующими сообщениями (даже при том, что он работает нормально):

SEVERE: Servlet.service() for servlet [DispatcherServlet] in context with path [/vouchd] threw exception [Circular view path [signup]: would dispatch back to the current handler URL [/vouchd/signup] 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 [signup]: would dispatch back to the current handler URL [/vouchd/signup] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

или InternalViewResolver:

WARN [http-bio-8080-exec-4] (DispatcherServlet.java:1057) - No mapping found for HTTP request with URI [/app/WEB-INF/jsp/call.jsp] in DispatcherServlet with name 'DispatcherServlet'

что, я думаю, лучшее из двух зол. Я не хочу отключать ведение журнала уровня WARN.

1 Ответ

7 голосов
/ 06 декабря 2011

Попробуйте с @ResponseStatus.Этот код возвращает 204 без содержимого и пропущено разрешение просмотра:

@ResponseStatus(NO_CONTENT)
void noView() {
  //...
}

Если вы хотите вернуть необработанные данные и просто сериализовать их в JSON или XML, используйте @ResponseBody:

@ResponseBody
MyPojo noView() {
  return new MyPojo();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...