正在将 spring 个控制器迁移到 restful 网络服务控制器
Migrating spring controllers to restful web service controller
我目前在我的 Web 应用程序中使用 spring 3 MVC,我有兴趣使用 spring 3 restful( @ResponseBody)功能。我正在使用 JSON 请求和响应。但我不确定在使用 JSON 响应时如何进行会话管理,以便我可以在多个 Web 请求中使用相同的数据。
请建议所有可能的场景,优缺点
如果您需要控制器内部的会话,只需将 Request 添加为方法的参数,Spring 就会为您完成这项工作。
然后你可以根据请求调用 getSession()
就可以了。
public void myMethodInController(HttpServletRequest request) {
HttpSession session = request.getSession();
}
这与responsebody无关,它是纯粹的Spring MVC。
编辑:如果你想通过会话在控制器之间共享表单数据,你可以这样做:
public ResourceOne myMethodInControllerOne(HttpServletRequest request, DataOne data) {
// call some injected service to create a ResourceOne
ResourceOne response = service.doSomething(data);
if ( null != response) {
HttpSession session = request.getSession();
session.setAttribute("dataOne", data);
}
return response;
}
public ResourceTwo myMethodInControllerTwo(HttpServletRequest request, DataTwo data) {
HttpSession session = request.getSession();
DataOne priorData = (DataOne) session.getAttribute("dataOne");
// call some injected service to create a ResourceTwo
ResourceTwo response = service.doSomething(data, priorData);
return response;
}
但这并不是真的RestFul。休息意味着无状态 API。更改您的 API 并在第二种方法中发送 DataOne 和 DataTwo 不是更好吗?
我目前在我的 Web 应用程序中使用 spring 3 MVC,我有兴趣使用 spring 3 restful( @ResponseBody)功能。我正在使用 JSON 请求和响应。但我不确定在使用 JSON 响应时如何进行会话管理,以便我可以在多个 Web 请求中使用相同的数据。 请建议所有可能的场景,优缺点
如果您需要控制器内部的会话,只需将 Request 添加为方法的参数,Spring 就会为您完成这项工作。
然后你可以根据请求调用 getSession()
就可以了。
public void myMethodInController(HttpServletRequest request) {
HttpSession session = request.getSession();
}
这与responsebody无关,它是纯粹的Spring MVC。
编辑:如果你想通过会话在控制器之间共享表单数据,你可以这样做:
public ResourceOne myMethodInControllerOne(HttpServletRequest request, DataOne data) {
// call some injected service to create a ResourceOne
ResourceOne response = service.doSomething(data);
if ( null != response) {
HttpSession session = request.getSession();
session.setAttribute("dataOne", data);
}
return response;
}
public ResourceTwo myMethodInControllerTwo(HttpServletRequest request, DataTwo data) {
HttpSession session = request.getSession();
DataOne priorData = (DataOne) session.getAttribute("dataOne");
// call some injected service to create a ResourceTwo
ResourceTwo response = service.doSomething(data, priorData);
return response;
}
但这并不是真的RestFul。休息意味着无状态 API。更改您的 API 并在第二种方法中发送 DataOne 和 DataTwo 不是更好吗?