0

我的问题是关于 Spring MVC 的功能。

@RequestMapping("SOME_VALUE")
RETURN_TYPE NAME_OF_FUNCTION (PARAMS){
     STATEMENTS;
}

有没有办法让 RETURN_TYPE 依赖于语句?

例如:当用户点击一个链接时,如果某个条件为真,我希望用户下载一个文件(即返回一个字节[])但如果它是假的,我想向用户展示一个带有可能选项的网页(即 ModelAndView 对象)。

现在我明白它可以简单地在页面中使用 javascript 实现,但回到我最初的问题,Spring MVC 中有没有一种方法可以为我们提供更好的处理?

4

2 回答 2

1

当您想要返回页面时,您可以简单地返回 String 并将其设置为您的 JSP 文件的名称(即“myjsppage”),而不是返回 Object,或者当您想要时将其设置为重定向(即“redirect:/mydownloadablefile”)开始下载。对于后一种情况,您还需要为“/mydownloadablefile” URL 添加另一个带有请求映射的控制器方法。

于 2013-11-15T21:29:41.423 回答
1

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返回supportsReturnTypetrue


在我看来,你不应该这样做。尽可能使条件为外部的,即来自请求。这样,您可以将条件映射到@RequestMapping并有多个@RequestMapping方法,每个可能的条件一个。

于 2013-11-13T21:46:40.323 回答