REST服务在POJO中序列化JSON请求后如何调用方法?

时间:2018-06-26 21:10:25

标签: java rest spring-boot serialization

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

1 个答案:

答案 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注释告诉它应按什么顺序将值传递到构造函数中。

如果您真的只想连接str1str2并将其另存为str3,则还可以在其 getter 中惰性地对其进行初始化:

public String getStr3(){
    if(str3 == null){
        str3 = str1 + str2;
    }
    return str3;
}