Мій клас виключення виглядає таким чином, при серіалізації за допомогою jackson, коли я намагався десеріалізувати його учасники отримали назву "повідомлення" і "restoreStatus", я очікував, що вони будуть" повідомленням "і"статус".
Чому jackson вирішив назвати мінливу стану як restoreStatus?
@XStreamAlias("RestoreInProgressException")
public class RestoreInProgressException extends HostManagerException {
private static final long serialVersionUID = xxxx;
private RestoreStatus status;
@JsonCreator
public RestoreInProgressException(@JsonProperty("message") String message, @JsonProperty("status") RestoreStatus status) {
super(message, HttpStatus.SC_CONFLICT);
this.status = status;
}
public RestoreStatus getRestoreStatus() {
return this.status;
}
}
Відповіді:
1 для відповіді № 1Будь ласка, дивіться це питання Джексон поля серіалізації знайти деяку інформацію, як алгоритм серіалізації працює в бібліотеці Джексона. У вашому прикладі ви маєте status
власності, але getRestoreStatus
метод геттера. Джексон читає всі геттер-методи з класу і намагається його серіалізувати. Джексон також додасть до вихідного JSON ваш status
властивість, якщо ви коментуєте його @JsonProperty
або @JsonProperty("status")
. У цьому випадку ваш вивід Jackson буде містити два властивості status
і restoreStatus
. Якщо ви хочете мати тільки status
Властивість у вашому вихідному JSON:
I. Змініть назву методу getter на getStatus
:
public RestoreStatus getStatus() {
return this.status;
}
II. Додати анотацію @JsonProperty("status")
до вашого методу:
@JsonProperty("status")
public RestoreStatus getRestoreStatus() {
return this.status;
}