Spring RestController удаляет "is" из имени свойства - PullRequest
0 голосов
/ 29 марта 2019

У меня есть объект со свойством isTechnician. Если я возвращаю этот объект через Spring RestController, свойство в http-ответе json называется technician. Почему весенний срез? Как я могу отключить его?

@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);
}

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Простым решением этой проблемы является использование аннотации @JsonProperty в функции получения.

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

Теперь ваш JSON станет

{
    "isTechnician":true
}

Надеюсь, он вам поможет.

1 голос
/ 29 марта 2019

По умолчанию Джексон имел видимость геттеров и сеттеров во время сериализации и десериализации, поэтому просто отключите его с помощью JsonAutoDetect

 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
0 голосов
/ 29 марта 2019

Ваш isTechnician геттер не соответствует стандартам. Вы должны назвать его isIsTechnician или getIsTechnician (поскольку свойство поля называется isTechnician)

или

аннотируйте свое поле с помощью @JsonProperty("isTechnician").

Джексон (анализатор Spring JSON по умолчанию) будет игнорировать имя получателя (из которого он получает соответствующее имя ключа JSON) и использовать имя, указанное в качестве значения в аннотации @JsonProperty.

...