簡體   English   中英

在 Spring 中未返回具有非標准 getter 名稱的變量

[英]Variable with non-standard getter name not getting returned in Spring

我試圖在我的 API 中返回RemoveHoldPayload 我注意到,當我使用以下 getter 名稱isToBeClosedResult (1) 時,響應缺少toBeClosedResult但是當我將 getter 名稱更改為標准名稱時: getToBeClosedResult然后變量在響應 object JSON 中返回。

為什么會這樣?

(1): --------------

{
    "autoHolds": null,
    "manualHolds": null,
    "incidentId": null,
    "comment": null,
    "commentType": null,
    "error": null,
    "toBeClosed": false,
    "closeStatusCode": 0,
    "commentId": null
}

API: -------------

@PostMapping(value = "/dummyAPI")
public Object dummyAPI () throws Exception {
    RemoveHoldPayload rh = new RemoveHoldPayload();
    return rh;
}

CLASS:-----------

import java.util.List;

public class RemoveHoldPayload {
    
    private List<AggregatedHoldListResource> autoHolds, manualHolds;
    private String incidentId, comment, commentType, toBeClosedResult,error;
    private boolean toBeClosed;
    private short closeStatusCode;
    private Integer commentId;
    
    public String getToBeClosedResult() {
        return toBeClosedResult;
    }
    public void setToBeClosedResult(String toBeClosedResult) {
        this.toBeClosedResult = toBeClosedResult;
    }
    
    public String getIncidentId() {
        return incidentId;
    }
    public void setIncidentId(String incidentId) {
        this.incidentId = incidentId;
    }
    public boolean getToBeClosed() {
        return toBeClosed;
    }
    public void setToBeClosed(boolean toBeClosed) {
        this.toBeClosed = toBeClosed;
    }
    public short getCloseStatusCode() {
        return closeStatusCode;
    }
    public void setCloseStatusCode(short closeStatusCode) {
        this.closeStatusCode = closeStatusCode;
    }
    public String getComment() {
        return comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
    public Integer getCommentId() {
        return commentId;
    }
    public void setCommentId(Integer commentId) {
        this.commentId = commentId;
    }
    public String getCommentType() {
        return commentType;
    }
    public void setCommentType(String commentType) {
        this.commentType = commentType;
    }
    public List<AggregatedHoldListResource> getAutoHolds() {
        return autoHolds;
    }
    public void setAutoHolds(List<AggregatedHoldListResource> autoHolds) {
        this.autoHolds = autoHolds;
    }
    public List<AggregatedHoldListResource> getManualHolds() {
        return manualHolds;
    }
    public void setManualHolds(List<AggregatedHoldListResource> manualHolds) {
        this.manualHolds = manualHolds;
    }
}

Spring 使用Jackson作為標准JSON庫,直到最后,它不知道變量的實際類型是什么。 所以基本上它使用 Java 代碼約定,所有 getter 都以get開頭

檢查此鏈接: Java 中 getter/setter 的命名約定

您可以使用@JsonAlias ,它為反序列化期間要接受的屬性定義一個或多個替代名稱,即將 JSON 數據設置為 Java object。

@JsonProperty定義邏輯屬性。 @JsonProperty可以在非靜態 setter 或 getter 方法或非靜態 object 字段中進行注釋。 邏輯屬性用於 JSON 的序列化和反序列化。 @JsonProperty注釋如下。

例如,你可以這樣做:

@JsonProperty("toBeClosed") 
public Boolean isToBeClosedResult() {
   return toBeClosed;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM