Spring MVC-запрос без представления - PullRequest
11 голосов
/ 21 марта 2011

У меня проблемы с конфигурацией Spring для следующих функций - мне нужно, чтобы запросы на представление работали нормально (отображать представление) и запросы на обслуживание просто выполнялись без рендеринга.Проблема, с которой я столкнулся, заключается в том, что после выполнения контроллера где-то внизу Spring решает, что экземпляр ModelAndView должен быть создан, даже если метод контроллера ничего не возвращает (void).Это вызывает представление, которое будет отображено, когда на самом деле я хочу просто ничего не делать, когда контроллер выполнил свою работу.Я уверен, что это должно быть что-то, что я делаю неправильно в конфигурации Spring (я предполагаю, что это связано с решателем представления).Любая помощь по этому вопросу приветствуется.Благодарю.

Вот код:

@Controller
@RequestMapping( "actions" )
public final class ServiceController{
    private static final Logger logger = LoggerFactory.getLogger( ServiceController.class );
    @RequestMapping( value = "/submit.service",method = RequestMethod.POST )
    public void test( @RequestParam( "mail" ) String mail ){
        ServiceController.logger.info( mail );
    }
}

И сервлеты в web.xml:

<servlet>
    <servlet-name>viewServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/viewServlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>viewServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Контекст:

<annotation-driven />
<beans:bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <beans:property name="resourceLoaderPath" value="/WEB-INF/velocity/" />
</beans:bean>

<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
    <beans:property name="cache" value="true" />
    <beans:property name="prefix" value="" />
    <beans:property name="suffix" value=".vm" />
</beans:bean>

Ответы [ 3 ]

14 голосов
/ 26 марта 2011

Возвращение нуля не сработало.

Тем временем я нашел решение - мне нужно было пометить метод с помощью

@ResponseBody

1 голос
/ 09 ноября 2011

другим решением было бы вернуть responseEntity, http://www.captaindebug.com/2011/07/using-spring-responseentity-class.html,, в конце концов вам понадобится способ сообщить об ошибке клиенту, и с помощью @ResponseEntity, если произойдет исключение, Spring отобразит это на html-странице.с ResponseEntity вы можете ответить http 500 добавить пользовательские данные.

0 голосов
/ 21 марта 2011

Я верю, что вы можете достичь этого, вернув null.

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