Java 在SpringREST中,请求对象是否在每个请求上实例化?

Java 在SpringREST中,请求对象是否在每个请求上实例化?,java,spring-mvc,jackson,Java,Spring Mvc,Jackson,我很难找到一个可靠的答案。我知道控制器的作用域是单例的,并且实例化一次,对于控制器类中的任何成员变量也是如此 我的问题是:传入的请求对象是每个请求上的新实例吗?假设Jackson正在将JSON请求主体映射到请求对象 例如: @RequestMapping(path = "/dosomething", method = POST) @ResponseBody public SomeObject doSomething(@RequestBody SomeObject someObject) {

我很难找到一个可靠的答案。我知道控制器的作用域是单例的,并且实例化一次,对于控制器类中的任何成员变量也是如此

我的问题是:传入的请求对象是每个请求上的新实例吗?假设Jackson正在将JSON请求主体映射到请求对象

例如:

@RequestMapping(path = "/dosomething", method = POST)
@ResponseBody
public SomeObject doSomething(@RequestBody SomeObject someObject) {
    // code here
    return someObject;
}
我想处理/存储或以其他方式更改someObject的状态,但不确定在处理多个请求时这有多安全,或者是否需要显式实例化从入站请求对象深层复制的新someObject


谢谢你的帮助

是的。传入Spring控制器的参数是每次调用的新实例


与任何其他singleton类类似,singleton对象的实例是重用的,而不是传递到方法中的参数(当然,除非您在多次调用singleton时重用了该对象)。但是在控制器的情况下,每次都从新的HttpServletRequests创建参数,因此没有重用实例的基础。

修改请求参数是安全的。不过,Spring是否会重用该实例不应该引起关注(但这是不太可能的,因为池开销比生成一个新的值对象要大得多)。谢谢!这是有道理的,但我很难找到能够证实这一点的文档。听起来为了更好地理解,我可以查看HttpServletRequest文档。再次感谢,我真的很感激。