0
votes

Comment renverser peu de types de la classe à l'aide de la chaussure à ressort?

J'ai une classe qui possède des informations des utilisateurs, y compris le champ de mot de passe. Lorsque l'utilisateur se connecte, il retournera tout de classe, y compris le mot de passe. Comment ne pas tout retourner de la classe, à l'exception du mot de passe ou de toutes les données importantes qui ne subsistent que dans la base de données.

J'ai essayé d'utiliser la carte Cela renvoie également la façon dont je veux, mais j'espérais que s'il y a quelque chose de plus facile ou plus rapide, puis map.

Il y a peu de réponses suggérant d'utiliser JSONIGNORE et transitoire. Si j'utilise ces deux méthodes, je ne suis pas capable de vous connecter. Parce que j'ai besoin de mot de passe de retour pour la connexion.

ma classe de pojo xxx

class de repo xxx

ceci est reposer API XXX

Y a-t-il une meilleure façon alors cartographier. Toute suggestion peut être utile.


0 commentaires

7 Réponses :


0
votes

Donc, il y a 2 façons différentes, vous pouvez aborder ce problème.

  1. Créez le champ de mot de passe transitoire dans votre classe d'entité.

    De cette façon, lorsque vous récupérez l'objet Utilisateurs, le champ de mot de passe serait vide.

    désavantage : passer par mot de passe transitoire entraînerait le fait que vous ne seriez pas en mesure d'obtenir un mot de passe via votre entité dans votre application.

    1. Utilisez @jsonignore (de la bibliothèque Jackson) sur le champ Mot de passe. De cette façon, lorsque vous retournez l'objet de l'objet Utilisateurs, le champ de mot de passe serait ignoré.

      désavantage : cela signifie à nouveau que, si vous souhaitez prendre le champ de mot de passe comme un champ de mot de passe d'entrée ou de retour sur l'application, vous ne pourriez pas le faire. En outre, il n'est pas recommandé de revenir à l'objet de votre classe de pojo à titre de réponse.

      Donc, vous pouvez y aller avec l'un ou l'autre gardant à l'esprit les inconvénients de chaque approche.


2 commentaires

Merci, mais je devrai vérifier le mot de passe de connexion. Donc, les deux sens ne sont pas utiles pour cette situation. Merci encore, je ne savais pas à propos de ces deux manières.


Fabrication de champ transitoire ne sauvera pas / persister le champ particulier dans dB afin que l'approche 1 est la mauvaise solution. En outre, JSONIGNORE fonctionnera pour des réponses JSON Serialize / désérialisez JSON, mais dans cette question, nous pouvons voir que l'utilisateur tente de charger des données dans le code Java.



0
votes

Outre la réponse déjà mentionnée, peu d'autres manières sont également présentes telles que JSONIGRAPERTES, JSONIMORETYPE, JSONFILTER. Je préfère JSONIGNORE pour supprimer le champ dans la sortie.

Voici un lien vers un bel exemple https://www.baeldung.com/jackson-ignore-properties-on- sérialisation

En outre, vous pouvez toujours créer une classe de pojo séparée pour revenir aux valeurs des désires.


0 commentaires

1
votes

En réalité, il y a un Way dans les requêtes JPA pour ne renvoyer que le champ spécifique pour que vous puissiez peut utiliser directement tout en récupérant les résultats.

Mais dans le cas où vous ne voulez pas perturber la méthode FoundByAusername que de créer un objet de classe d'utilisateurs et définir uniquement les champs souhaités.

L'approche que vous utilisez actuellement est également une solution réalisable.


1 commentaires

Je pense que je vais aller avec la voie de la requête. Je vais essayer demain



0
votes

La meilleure pratique typique ici est de traiter le mot de passe comme une sous-source : logiquement pas une partie directe de la ressource utilisateur, mais elle est liée à elle (par exemple, elle pourrait avoir sa propre URL au / utilisateurs / {id} / mot de passe ). Le repos de données de printemps gère automatiquement lorsque vous avez une relation JPA @onetoone , mais il n'y a aucun problème à le faire vous-même.

Cet exemple montre pourquoi il n'est pas une bonne idée d'utiliser les classes @enty directement en tant que représentations de l'API JSON, car vous voudrez peut-être avoir des différences internes (y compris la modification de l'avenir sans déranger. clients). Au lieu de cela, utilisez un objet transfert de données (DTO) qui sert de "copie JSON" de votre entité. Des outils tels que MAPStructeur Fonctionner très simple de copier des propriétés entre utilisateur et userDo < / code>.

(enfin, si vous faites vous trouvez à renvoyer une carte nue pour une raison étrange, ce qui se produit, il est généralement préférable d'utiliser carte. de ("clé", valeur) pour la simplicité.)


0 commentaires

0
votes

Une autre solution pourrait créer une méthode dans le référentiel avec @Quisery Annotation comme: xxx

puis dans votre classe de myenté crée un constructeur qui correspondant au constructeur de la requête.

En dernier, dans votre contrôleur:

au lieu de: xxx

faire: xxx

retour Cause directement Spring Ayez naturellement une intégration naturelle avec Jackson Serialization, donc par défaut, votre réponse sera un objet JSON

Je pense que cette solution est une bonne alternative dans votre cas.


0 commentaires

0
votes

Si vous souhaitez exclure le mot de passe de la réponse, annotez le champ de mot de passe avec @jsonignore code>.

Si vous souhaitez exclure plus d'un champ dans l'utilisateur code> entité puis crée une classe userDoTo cod> et ajoutez le champ requis dans ce userDo code> classe. p>

Utilisez ModelMapper code> pour mapper l'utilisateur Entité to userDto code> classe. Enfin, renvoyez cette classe utilisateurDo en tant qu'objet de réponse. P>

Exemple: P>

  User user = new User();

  UserDto userDto = new ModelMapper.map(user, UserDto.class);


0 commentaires

1
votes

Le moyen le plus simple est de contrôler la sérialisation à JSON via les annotations fournies par la bibliothèque JSON par défaut qui est Jackson.

https://fasterxml.github.io/jackson-annotations/javadoc/2.5/com/fasterxml/jackson/annotation/jsonignore.html xxx

Vous pouvez également le faire via un mixin Jackson pour éviter de "polluer" l'entité avec des instructions de traitement JSON.


0 commentaires