【发布时间】:2011-12-01 18:00:18
【问题描述】:
我有一个 Spring MVC 控制器,其中包含一个使用 AJAX 调用的操作。
@SessionAttributes({"userContext"})
public class Controller
{
...
@RequestMapping(value = "/my-url", method= { RequestMethods.POST })
public ModelAndView doSomething(@ModelAttribute("userContext") UserContext context,
SessionStatus sessionStatus)
{
BusinessObject obj = doSomeBusinessLogic(context.getUserName());
sessionStatus.setComplete();
ModelAndView mav = new ModelAndView("jsonView");
mav.addObject("someInt", obj.getId());
return mav;
}
}
当我运行此操作时,我收到以下异常:
net.sf.json.JSONException: There is a cycle in the hierarchy!
at t.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
at net.sf.json.JSONObject._fromBean(JSONObject.java:833)
at net.sf.json.JSONObject.fromObject(JSONObject.java:168)
at org.springframework.web.servlet.view.json.writer.jsonlib.PropertyEditorRegistryValueProcessor.processObjectValue(PropertyEditorRegistryValueProcessor.java:127)
at net.sf.json.JSONObject._fromMap(JSONObject.java:1334)
Truncated. see log file for complete stacktrace
在做了一些调试之后,我发现 Spring 将 UserContext 对象放到了我返回的 ModelAndView 上。如果我硬编码我的用户名并从方法的参数中删除上下文对象,则操作会成功运行。有没有办法配置 Spring 从返回的 ModelAndView 中省略带有 ModelAttribute 注释的参数?如您所见,sessionStatus.setComplete() 无效。
【问题讨论】:
标签: spring-mvc