0

我想做的事:

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

JSONResponse 只是一个带有 2 个变量的简单对象:状态为字符串,结果为对象,如下所示:

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)

4

2 回答 2

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");
    }
}
于 2012-04-12T21:25:04.220 回答
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;   
}
于 2012-04-13T10:33:06.940 回答