繁体   English   中英

在Spring MVC中,是否可以在一个请求处理程序方法中使用不同的返回类型?

[英]In Spring MVC, is it possible to have different return types in one request handler method?

例如,如果请求成功,我将返回一个View,如果没有,则返回一个指示错误消息的String,并将content-type设置为xml或json。 并且JavaScript XHR回调方法将完成重定向到另一个页面(View)或保持在同一页面并显示错误信息的工作。

根据我读到的内容,似乎我应该使用“void”作为处理程序方法的返回类型。 检查一下:“如果方法处理响应本身(通过直接写响应内容,为此目的声明类型为ServletResponse / HttpServletResponse的参数)或者假定视图名称应通过RequestToViewNameTranslator隐式确定(无法声明),则为void处理程序方法签名中的响应参数。“(Spring Framework参考)。

我不明白的是“视图名称应该通过RequestToViewNameTranslator隐式确定(不在处理程序方法签名中声明响应参数)”是什么意思? 有人给我举个例子吗?

@ExceptionHandler解决方案是让您的普通控制器方法在出错时抛出异常,然后使用@ExceptionHandler方法捕获它并返回错误响应。

@RequestMapping("/")
public View requestHandler() throws SomeException
{
  // ...
}

@ExceptionHandler(SomeException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public @ResponseBody String handleSomeException(SomeExcption ex)
{
  return ex.getMessage(); // for example
}

@ResponseBody MappingJacksonHttpMessageConverter使用的@ResponseBody将不再需要直接访问HttpServletResponse来输出JSON。 或者,使用MappingJacksonJsonViewModel 使用XML转换器/视图可以完成相同的操作。

如果没有指定其他视图名称, RequestToViewNameTranslator将(如人们猜测的那样)将请求转换为视图名称。 有关示例,请参见DefaultRequestToViewNameTranslator

在你的特殊情况下:

  • 如果一切正常 - 那么返回一个普通(jsp)视图
  • 如果发生错误 - 则打印错误页面

我会以更标准的方式做到这一点:请求处理程序方法“返回”视图名称或模型和视图。 如果出现错误,则请求处理程序方法会抛出异常。 Spring提供了处理异常的功能,即特殊视图处理程序。

我不明白的是“视图名称应该通过RequestToViewNameTranslator隐式确定(不在处理程序方法签名中声明响应参数)”是什么意思?

关于Spring MVC的优秀文章引用:

一个有趣的案例是当方法未指定视图时发生的情况(例如,返回类型为void)。 在这种情况下,约定是DispatcherServlet重用请求URI的路径信息,删除前导斜杠和扩展名。 [...]鉴于此请求处理方法和“/ accounts / show”的请求映射,我们可以期望DispatcherServlet回退到默认视图名称“accounts / show”

还有一个例子。 请参阅http://www.infoq.com/articles/spring-2.5-ii-spring-mvc ,“灵活请求处理方法签名”一章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM