0
votes

Spring RestController supprime "est" du nom de propriété

J'ai un objet avec la propriété isTechnician. Si je retourne cet objet via un Spring RestController, la propriété dans la réponse http json est nommée technician. Pourquoi le printemps est-il coupé? Comment puis-je le désactiver?

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

RestController

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

...

public boolean isTechnician() {
    return isTechnician;
}

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


2 commentaires

Pouvez-vous montrer la classe avec des getters et des setters


Bon indice. Merci.


3 Réponses :


0
votes

Votre getter isTechnician n'est pas conforme aux normes. Vous devez le nommer isIsTechnician ou getIsTechnician (puisque la propriété de champ s'appelle isTechnician )

ou

annotez votre champ avec @JsonProperty ("isTechnician") .

Jackson (l'analyseur Spring JSON par défaut) ignorera le nom du getter (à partir duquel il obtient le nom de clé JSON correspondant) et utilisera celui spécifié comme valeur dans @JsonProperty annotation.


0 commentaires

1
votes

Une solution simple à ce problème consiste à utiliser l'annotation @JsonProperty sur votre fonction getter.

{
    "isTechnician":true
}

Maintenant, votre JSON deviendra

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

J'espère que cela vous aidera.


1 commentaires

Meilleure solution



1
votes

Par défaut, jackson avait une visibilité sur les getters et les setters lors de la sérialisation et de la désérialisation, il suffit de désactiver cela en utilisant JsonAutoDetect

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


0 commentaires