我的异常类看起来像这样,当使用jackson序列化时,我试图反序列化它 成员被命名为'message'和' restoreStatus ',我期待他们成为'消息'和'状态'。
为什么jackson选择将我的状态变量命名为restoreStatus?jackson / json命名约定如何工作?
@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;
}
}
答案 0 :(得分:1)
请参阅此问题Jackson field based serialization以查找序列化算法在Jackson库中如何工作的一些信息。在您的示例中,您拥有status
属性,但getRestoreStatus
获取方法。 Jackson从类中读取所有getter方法并尝试序列化它。如果您使用status
或@JsonProperty
对其进行注释,杰克逊还会将@JsonProperty("status")
属性添加到输出JSON中。在这种情况下,您的输出杰克逊将包含两个属性status
和restoreStatus
。如果您希望在输出JSON中只有status
属性,则必须:
I.将您的getter方法名称更改为getStatus
:
public RestoreStatus getStatus() {
return this.status;
}
II。在方法中添加注释@JsonProperty("status")
:
@JsonProperty("status")
public RestoreStatus getRestoreStatus() {
return this.status;
}