我想做什么:
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)答案 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;
}