Java Json/Jackson命名约定

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

当使用jackson序列化时,当我尝试反序列化时,我的异常类是这样的 成员名为“message”和“restoreStatus”,我希望他们是“message”和“status

为什么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;
    }

}
请看这个问题,以了解序列化算法在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)。