繁体   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