简体   繁体   English

在 Spring 中未返回具有非标准 getter 名称的变量

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

I am trying to return RemoveHoldPayload in my API.我试图在我的 API 中返回RemoveHoldPayload I noticed that when I used the following getter name isToBeClosedResult (1) then the response is missing toBeClosedResult but when I change the getter name to a standard name: getToBeClosedResult then the variable is getting returned in the response object JSON.我注意到,当我使用以下 getter 名称isToBeClosedResult (1) 时,响应缺少toBeClosedResult但是当我将 getter 名称更改为标准名称时: getToBeClosedResult然后变量在响应 object JSON 中返回。

Why is this happening?为什么会这样?

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

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

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

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

CLASS: ----------- 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 use Jackson as a standard JSON library and till the end, it doesn't know what is the actual type of your variable. Spring 使用Jackson作为标准JSON库,直到最后,它不知道变量的实际类型是什么。 So basically it uses Java Code Conventions where all getters start with get所以基本上它使用 Java 代码约定,所有 getter 都以get开头

Check this link: Naming convention for getters/setters in Java检查此链接: Java 中 getter/setter 的命名约定

You can use @JsonAlias which defines one or more alternative names for a property to be accepted during deserialization ie setting JSON data to Java object.您可以使用@JsonAlias ,它为反序列化期间要接受的属性定义一个或多个替代名称,即将 JSON 数据设置为 Java object。

Or @JsonProperty to define logical property.@JsonProperty定义逻辑属性。 @JsonProperty can be annotated at non-static setter or getter method or non-static object field. @JsonProperty可以在非静态 setter 或 getter 方法或非静态 object 字段中进行注释。 The logical property is used in serialization and de-serialization of JSON.逻辑属性用于 JSON 的序列化和反序列化。 @JsonProperty is annotated as following. @JsonProperty注释如下。

For example, you can do smth like that:例如,你可以这样做:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM