[英]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.