MyPojo.java
public class MyPojo
{
private String str1;
private String str2;
private String str3;
//setters
//getters
}
RestController
@RestController
public class MyController
{
public @ResponseBody
String getDetails(@RequestBody MyPojo myPojo)
{
}
}
jsonRequest
{
"str1" : "value1",
"str2" : "value2"
}
现在,当我从邮递员进行API调用并在控制器的第一行中创建一个断点时,我可以看到RequestBody变量myPojo已被序列化并且具有两个变量的值。 对我来说正确。
现在我想要一些功能,例如,我可以调用一个方法,该方法从str1和str2取值,并设置str3和str2的值并置str3。
我尝试了什么 1:使用@Component将POJO变成一个组件,但是它会在加载上下文时初始化该值,那时该对象为空
在api中收到请求后,是否可以将连接值分配给str3
?
答案 0 :(得分:1)
您可以在构造函数上使用@JsonGenerator
来解决此问题:
@JsonGenerator
public MyPojo(@JsonProperty("str1") String str1, @JsonProperty("str2") String str2) {
this.str1 = str1;
this.str2 = str2;
this.str3 = str1 + str2;
}
如果存在@JsonGenerator
批注,Jackson(spring使用的反序列化器)将调用此构造函数。 @JsonProperty
注释告诉它应按什么顺序将值传递到构造函数中。
如果您真的只想连接str1
和str2
并将其另存为str3
,则还可以在其 getter 中惰性地对其进行初始化:
public String getStr3(){
if(str3 == null){
str3 = str1 + str2;
}
return str3;
}