Json在多个Java对象中反序列化



我尝试反序列化json:

{
"date": "2021_05",
"uuid": "3ba8b966-993f-49e0-b349-e528843a382c",
"dataset": "dataset",
"hmm_hit": "hit",
"hmm_evalue": "6.7e-186",
"hmm_score": "610.9"  
},

我有两个实体:

@Entity
public class HmmResult {
@Id
@GeneratedValue
@JsonIgnore
private Integer id;
@JsonProperty("hmm_hit")
private String hmm;
@JsonProperty("hmm_evalue")
private String eValue;
@JsonProperty("hmm_score")
private Float score;
}

@Entity
public class Protein {
@Id
@GeneratedValue
@JsonIgnore
private Integer id;
@JsonProperty("date")
private String date;
@JsonProperty("uuid")
private String uuid;
@JsonProperty("dataset")
private String dataset;
@OneToOne
@JsonDeserialize(as = HmmResult.class)
private HmmResult hmmResult;

如何用一个json条目同时反序列化两个实体?以下是Jackson ObjectMapper的主要摘录:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Protein p = objectMapper.readValue(new File(file), Protein.class);

它解析";日期"uuid";以及";数据集";很好,但不能用"解析HmResult对象;hmm_ subfamily"hmm_evalue";以及";hmm_score";values:我得到错误:p.getHmResult((:null。(HmResult hm=objectMapper.readValue(新文件(File(,HmResult.class(;单独工作也很好(。

对此有@JsonUnwrapped注释。应该这样工作:

public class Protein {
@JsonProperty("date")
private String date;
@JsonProperty("uuid")
private String uuid;
@JsonProperty("dataset")
private String dataset;
@JsonUnwrapped
private HmmResult hmmResult;
}
var protein = new ObjectMapper().readValue(new File(file), Protein.class);

最新更新