Json / Jackson命名大会

时间:2013-11-28 02:19:06

标签: java json jackson

我的异常类看起来像这样,当使用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;
    }

}

1 个答案:

答案 0 :(得分:1)

请参阅此问题Jackson field based serialization以查找序列化算法在Jackson库中如何工作的一些信息。在您的示例中,您拥有status属性,但getRestoreStatus获取方法。 Jackson从类中读取所有getter方法并尝试序列化它。如果您使用status@JsonProperty对其进行注释,杰克逊还会将@JsonProperty("status")属性添加到输出JSON中。在这种情况下,您的输出杰克逊将包含两个属性statusrestoreStatus。如果您希望在输出JSON中只有status属性,则必须:
I.将您的getter方法名称更改为getStatus

public RestoreStatus getStatus() {
    return this.status;
}

II。在方法中添加注释@JsonProperty("status")

@JsonProperty("status")
public RestoreStatus getRestoreStatus() {
    return this.status;
}