Spring 3.2+(我不确定以前的版本)的工作方式如下。带注释的处理程序方法@RequestMapping
通过反射调用,无论其返回类型如何。Spring 接收它的返回值并调度一个已注册HandlerMethodReturnValueHandler
的来处理返回值(如果它支持)。
HandlerMethodReturnValueHandler
, for @ResponseBody
, for ResponseEntity
, for String
, for等有很多类型ModelAndView
。您可以在 javadoc 中看到其中的大部分。
因此,一种丑陋的方法是将您的方法定义为
RequestMapping("SOME_VALUE")
public Object NAME_OF_FUNCTION (PARAMS){
if (something) {
return "a string";
} else if (somethingElse) {
return new ResponseEntity(new byte[] {1,2,3});
} else
return new OtherType();
}
Spring 将使用第一个HandlerMethodReturnValueHandler
返回supportsReturnType
的true
。
在我看来,你不应该这样做。尽可能使条件为外部的,即来自请求。这样,您可以将条件映射到@RequestMapping
并有多个@RequestMapping
方法,每个可能的条件一个。