此问题与 this 相关。我有一个 Restful 服务,它以异步方式调用许多 Web 服务(使用线程 - 即发即忘)。我将我的服务收到的请求 header 传递给这些 Web 服务。然而,由于这些请求是以异步方式触发的,因此这些请求通常在我的 REST 服务返回响应后执行。这会导致 HTTP 请求对象丢失。因此,正如本线程中所建议的,我使用 session 范围来保留请求 header 。这会不会有什么负面影响,我应该分析一下。我必须考虑更好的方法吗?
最佳答案
如果您开始使用 session 范围来存储请求,您的服务就不再是 RESTful,因为它不是无状态的。我建议完全避免使用 session 范围。
如果需要在异步线程中使用request对象(使用Spring的@Async
注解),只需通过参数将其传递给异步逻辑即可。
类似这样的事情:
@Component
public class AsyncUserService {
@Async("customTaskExecutor")
public void updateOrAddUser(int id, HttpServletRequest request) throws {
//do your stuff
}
}
@Controller
@RequestMapping("/users")
public class UserController {
private final AsyncUserService userService;
@Autowired
public UserController(AsyncUserService userService) {
super();
this.userService = userService;
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
public void putUser(@PathVariable("id") int identifier, HttpServletRequest request) {
userService.updateOrAddUser(identifier, request);
}
}
关于java - Restful Spring 服务中的 session 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883745/