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.json
和 test3.json
是你上面的例子。
我收到服务的回复。可以是这样的:
{
"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.json
和 test3.json
是你上面的例子。