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

Bob*_*obo 3 java spring spring-mvc

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

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

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

Sto*_*ica 6

更简洁的解决方案是让您的普通控制器方法在出错时抛出异常,然后有一个@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
}
Run Code Online (Sandbox Code Playgroud)

一个MappingJacksonHttpMessageConverter与使用@ResponseBody将删除需要访问HttpServletResponse直接输出JSON.或者,使用a MappingJacksonJsonView和a Model.使用XML转换器/视图可以完成相同的操作.

一个RequestToViewNameTranslator意志(作为一个可能猜测),如果没有指定其他视图名翻译成请求视图名称.请参阅DefaultRequestToViewNameTranslator示例.