我怎么能将Spring MVC ModelAndView作为String返回到JSONResponse对象?

时间:2012-04-12 18:52:27

标签: json spring spring-mvc jackson

我想做什么:

  • 系统会提示用户提供一系列操作选项,例如“搜索用户”,“注册新用户”等。我的想法是,当用户单击选择其中一个选项时,使用JQuery触发AJAX调用,然后执行该方法,返回JSONResponse。

JSONResponse只是一个带有2个变量的简单对象:status as String,result as Object,如下所示:

public class JSONResponse {
private String status = null;
private Object result = null;


public String getStatus() {
    return status;
}
public void setStatus(String status) {
    this.status = status;
}
public Object getResult() {
    return result;
}
public void setResult(Object result) {
    this.result = result;
}       
}

但是,有时我想将ModelAndView返回到此响应中。例如:当用户搜索用户时,应用程序搜索它,然后返回带有可能用户列表的ModelAndView。实现此目的的一种方法是将ModelAndView呈现为String,然后将其作为结果放入JSONResponse对象中。问题是如何将ModelAndView呈现为String以将其放入JSONReponse?

PS:我正在使用Tomcat 7,JDK 6,Spring MVC 3.0和Tiles 2,Jackson(将java对象转换为JSON)

2 个答案:

答案 0 :(得分:1)

如果需要,您可以返回ModelAndView写入响应流。

public ModelAndView getSomething(HttpServletResponse response) { 
    // perform your logic

    if(obj returned must be a json) {
        try {
              new MappingJacksonHttpMessageConverter().write(obj, MediaType.APPLICATION_JSON, new ServletServerHttpResponse(response));
        } catch(Exception e) {
              logger.error("Error while serializing to JSON string.");
        }

        return null;
    } else {
        return new ModelAndView("yourview");
    }
}

答案 1 :(得分:0)

从您的问题我理解的有时您需要返回json,有时需要模型和视图,因为您使用模型和视图传递搜索列表。  理想情况下,这两件事必须以不同的方法处理,但是当你想用同样的方法处理它时,你的方法必须返回 String 而不是 ModelAndView ,以便你可以返回json数据。您要发送给您的搜索列表可以将其放入会话中,然后您将在JSP页面上获取它(因为会话范围)。

方法看起来有点像这样:

public @ResponseBody
String methodName(HttpServletRequest request) {


       if(jsondata){ //Wants to send json data
       return jsonFinalData.toString();
       }else{
       //store search list in session
        return view_name;   
}