使用Jackson库在派生类上更改JSON属性名称

时间:2018-04-16 08:02:51

标签: java json spring jackson

我正在使用Spring开发新的REST API,我有BaseResponse类作为所有响应的基本响应。此类包含属性String requestUuid;,在某些情况下,此requestUuid必须使用属性名称requestUuid序列化,在其他情况下,必须将其归为request_uuid,我知道我可以使用{ {1}}作为字段级注释,但它会影响所有响应。是否有任何方法可以专门为每个派生类重写属性名称。

3 个答案:

答案 0 :(得分:4)

您可以在方法级别使用@JsonProperty。这样,你可以在子类中覆盖字段的getter方法并注释它。

例如:

class BaseResponse {
    private String requestUuid;

    public getRequestUuid() {
        return requestUuid;
    }
}

class OtherResponse extends BaseResponse {
    @Override
    @JsonProperty("request_uuid")
    public getRequestUuid() {
        return super.getRequestUuid();
    }
}

答案 1 :(得分:1)

您可以使用不同的密钥名称发送两次字段。

@JsonAnyGetter
public Map<String, Object> otherFields() {
    Map<String, Object> otherFields = new HashMap<>();
    otherFields.put("requestUuid", this.requestUuid);
    otherFields.put("request_uuid", this.requestUuid);
    return otherFields;
}

另外,请忽略您的实际字段:

@JsonIgnore
private String requestUuid;

答案 2 :(得分:-1)

不,它不可能,你可以为不同类型的请求创建新类。