Jackson Spring 检查进来的是什么类型的对象

Jackson Spring Check what kind of object came in

我收到服务的回复。可以是这样的:

{
    "uid": "f12c394f-5cb7-48b8-bfa5-17d248df4866",
    "data": [
        {
            "vac_status": "1",
            "vaccination_date": "2021-03-16",
            "lastname": "lastname",
            "firstname": "firstname",
            "birth_date": "1993-12-01",
            "gender": "1"
        }
    ]
}

也可能是这个。

{
    "uid": "f12c394f-5cb7-48b8-bfa5-17d248df4866",
    "data": [
        {
            "cov_status": "2",
            "disease_outcome_date": "2021-05-19",
            "lastname": "lastname",
            "firstname": "firstname",
            "birth_date": "1973-02-01",
            "gender": "1"           
        }
    ]
}

有什么方法可以检查我得到了什么?我只是想在字符串中查找匹配项。 (我将查询作为一个字符串并查找单词“vac”或“cov”)我认为这不是正确的方法。 另外,如果我不知道我遇到了什么,我不知道如何正确反序列化。 不知道是什么类型的。

您可以使用 Jackson DEDUCTION 方法来识别 类 它正在反序列化。

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;

public class ParseExample {
    static class Status {
        public String gender;
        public String birth_date;
        public String firstname;
        public String lastname;
    }

    static class VacStatus extends Status {

        public String vac_status;
        public String vaccination_date;
    }

    static class DiseaseStatus extends Status{

        public String cov_status;
        public String disease_outcome_date;
    }

    static class Response {
        public String uid;
        @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION)
        @JsonSubTypes({
                @JsonSubTypes.Type(VacStatus.class),
                @JsonSubTypes.Type(DiseaseStatus.class)})
        public List<Status> data;
    }

    public static void main(String... args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        JsonParser parser = mapper.createParser(ParseExample.class.getClassLoader().getResourceAsStream("test2.json"));
        Response w = parser.readValueAs(new TypeReference<Response>() {});
        parser = mapper.createParser(ParseExample.class.getClassLoader().getResourceAsStream("test3.json"));
        Response w2 = parser.readValueAs(new TypeReference<Response>() {});
    }
}

test2.jsontest3.json 是你上面的例子。