在一个不可变的类/对象中,我有一个没有参数的构造函数将值初始化为默认值/null,另一个必需的参数构造函数将所有值初始化为构造函数的参数。
使用表单绑定时(通过在控制器中的请求参数中指定),spring 始终调用无参数构造函数而不初始化值。我怎样才能确保 spring 只调用所需的参数构造函数?
这是在 spring 版本 5.1.5 中。我也尝试在“必需的参数构造函数”上添加 @ConstructorProperties,但无济于事。
我的不可变表单/bean 对象:
public class ImmutableObj {
private final Integer id;
private final String name;
// no arg constructor
// spring calls this one when resolving request params
public ImmutableObj() {
this(null, null);
}
// required args constructor
// I want spring to call this one when resolving request params
@ConstructorProperies({"id", "name"})
public ImmutableObj(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
}
还有我的控制器:
@Controller
public class MyController {
@GetMapping("myStuff")
public String getMyStuff(ImmutableObj requestParams) {
// here the value of request params
// has nulls due to no arg constructor being called
return "someStuff";
}
}
调用“/myStuff?id=123&name=hello”时
预期的 -requestParams.getId()=123, requestParams.getName()=hello
实际的 -requestParams.getId()=null, requestParams.getName()=null
HUH函数
相关分类