Spring RestController 从 属性 名称中删除 "is"

Spring RestController removes "is" from property name

我有一个对象 属性 isTechnician。如果我通过 Spring RestController return 这个对象,http 响应 json 中的 属性 被命名为技术员。 为什么spring cut of the is?我怎样才能禁用它?

@Document
public class User {
...
private boolean isTechnician;

...

public boolean isTechnician() {
    return isTechnician;
}

public void setTechnician(boolean technician) {
    isTechnician = technician;
}
}

RestController

@GetMapping("user")
public List<User> GetUsers() {
    var query = new Query();
    query.addCriteria(where("disabled").is(false));
    return mongoTemplate.find(query, User.class);
}

您的 isTechnician getter 不符合标准。您应该将其命名为 isIsTechniciangetIsTechnician(因为字段 属性 被称为 isTechnician

@JsonProperty("isTechnician") 注释您的字段。

Jackson(默认的 Spring JSON 解析器)将 ignore getter 名称(从中获取相应的 JSON 键名)并使用 @JsonProperty 注释中指定的值。

此问题的一个简单解决方案是在 getter 函数上使用注释 @JsonProperty。

@JsonProperty("isTechnician")
public boolean isTechnician() {
    return isTechnician;
}

现在你的 JSON 将变成

{
    "isTechnician":true
}

希望对你有帮助。

默认情况下,jackson 在序列化和反序列化时可以看到 getter 和 setter,因此只需使用 JsonAutoDetect

禁用它
 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)