Java Json/Jackson命名约定
当使用jackson序列化时,当我尝试反序列化时,我的异常类是这样的 成员名为“message”和“restoreStatus”,我希望他们是“message”和“status” 为什么jackson选择将我的状态变量命名为restoreStatus?jackson/json命名约定是如何工作的Java Json/Jackson命名约定,java,json,jackson,Java,Json,Jackson,当使用jackson序列化时,当我尝试反序列化时,我的异常类是这样的 成员名为“message”和“restoreStatus”,我希望他们是“message”和“status” 为什么jackson选择将我的状态变量命名为restoreStatus?jackson/json命名约定是如何工作的 @XStreamAlias("RestoreInProgressException") public class RestoreInProgressException extends HostManag
@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;
}
}
请看这个问题,以了解序列化算法在Jackson库中是如何工作的。在您的示例中,您有status
属性,但有getRestoreStatus
getter方法。Jackson从类中读取所有getter方法并尝试序列化它。如果您使用@JsonProperty
或@JsonProperty(“status”)
对其进行注释,Jackson还将向输出JSON添加您的status
属性。在这种情况下,您的输出将包含两个属性status
和restoreStatus
。如果您想在输出JSON中只包含status
属性,您必须:I.将getter方法名称更改为
getStatus
:
public RestoreStatus getStatus() {
return this.status;
}
二,。将注释@JsonProperty(“status”)
添加到方法中:
@JsonProperty("status")
public RestoreStatus getRestoreStatus() {
return this.status;
}
对的然而,在这种情况下,不会有“状态”,因为字段是私有的,并且默认情况下只自动检测公共字段(和getter)。