#java #json #jackson
Вопрос:
Я пытаюсь десериализовать 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 hmmResu<
Как десериализовать обе сущности одновременно с помощью одной записи json ?
Вот выдержка из main с помощью ObjectMapper Джексона :
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Protein p = objectMapper.readValue(new File(file), Protein.class);
Он отлично анализирует «дату», «uuid» и «набор данных», но не может проанализировать объект HmmResult со значениями «hmm_subfamily», «hmm_evalue» и «hmm_score»: я получаю ошибку : p.getHmmResult() : null. (HmmResult hm = ObjectMapper.readValue(новый файл(файл), HmmResult.class); тоже отлично работает в одиночку).
Ответ №1:
Для этого есть @JsonUnwrapped
аннотация. Должно работать так:
public class Protein {
@JsonProperty("date")
private String date;
@JsonProperty("uuid")
private String uuid;
@JsonProperty("dataset")
private String dataset;
@JsonUnwrapped
private HmmResult hmmResu<
}
var protein = new ObjectMapper().readValue(new File(file), Protein.class);