没有呈现视图的 Spring MVC 请求

Posted

技术标签:

【中文标题】没有呈现视图的 Spring MVC 请求【英文标题】:Spring MVC request with no view rendered 【发布时间】:2011-07-19 07:09:49 【问题描述】:

我在为以下功能配置 Spring 时遇到问题 - 我需要视图请求正常运行(渲染视图),并且服务请求只需执行而不渲染任何内容。 我遇到的问题是,在控制器执行之后,即使控制器方法没有返回任何内容(void),Spring 也会决定对 ModelAndView 进行实例化。这会触发要渲染的视图,而实际上,一旦控制器完成了它的工作,我只想什么都不做。 我确定这一定是我在 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>
    <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>

【问题讨论】:

RequestMapping 上的无效返回类型意味着您打算自己响应您没有执行的请求 【参考方案1】:

另一种解决方案是返回一个 responseEntity,http://www.captaindebug.com/2011/07/using-spring-responseentity-class.html,毕竟您需要一种方法来向客户端发出错误信号,并且如果发生异常,spring 会使用@ResponseEntity 在 html 页面中呈现它。使用 ResponseEntity 您可以使用 http 500 添加自定义数据进行响应。

【讨论】:

【参考方案2】:

返回 null 无效。

与此同时,我找到了解决方案 - 我需要用

注释该方法

@ResponseBody

【讨论】:

【参考方案3】:

我相信您可以通过返回 null 来实现。

【讨论】:

以上是关于没有呈现视图的 Spring MVC 请求的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 工作原理

Spring MVC 工作原理

Spring MVC学习—ViewSolvsolver视图解析器的详细介绍与使用案例

Spring MVC:无法渲染视图 - $ 正在视图中渲染

java之spring mvc之数据处理

14 个 Spring MVC 顶级技巧!