Dans Spring MVC, vous pouvez rencontrer des scénarios dans lesquels vous devez ignorer dynamiquement des champs spécifiques des objets Java lors de la sérialisation eux en JSON. Ceci est particulièrement utile lors de la gestion d'objets contenant des données sensibles ou non pertinentes pour certains clients ou points de terminaison.
Considérez la classe de modèle Java suivante annotée avec @Entity d'Hibernate :
<code class="java">@Entity @Table(name = "user", catalog = "userdb") @JsonIgnoreProperties(ignoreUnknown = true) public class User implements java.io.Serializable { // ... Class definition omitted for brevity }</code>
Dans votre Spring MVC contrôleur, vous récupérez l'objet User dans une base de données et le renvoyez sous forme de réponse JSON :
<code class="java">@Controller public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/getUser/{userId}", method = RequestMethod.GET) @ResponseBody public User getUser(@PathVariable Integer userId) throws Exception { User user = userService.get(userId); user.setCreatedBy(null); user.setUpdatedBy(null); return user; } }</code>
Par défaut, la représentation JSON de l'objet User inclura tous ses champs. Cependant, vous souhaiterez peut-être exclure les champs sensibles tels que selectedPwd,createdBy et updateBy de certaines réponses.
Une approche pour y parvenir consiste à définir manuellement les champs indésirables sur null avant de renvoyer l'objet. Cependant, cette méthode peut être sujette aux erreurs et inefficace.
Une solution plus élégante consiste à utiliser l'annotation @JsonIgnoreProperties. Vous pouvez spécifier les champs à ignorer en utilisant leurs noms de propriété dans l'annotation :
<code class="java">@Entity @Table(name = "user", catalog = "userdb") @JsonIgnoreProperties(ignoreUnknown = true, value = {"encryptedPwd", "createdBy", "updatedBy"}) public class User implements java.io.Serializable { // ... Class definition omitted for brevity }</code>
Avec cette annotation en place, les champs encryptésPwd, créésBy et mis à jourBy seront exclus de la représentation JSON.
Vous pouvez également utiliser l'annotation @JsonIgnore sur des champs individuels :
<code class="java">@Entity @Table(name = "user", catalog = "userdb") @JsonIgnoreProperties(ignoreUnknown = true) public class User implements java.io.Serializable { @JsonIgnore private String encryptedPwd; private String createdBy; // ... Class definition omitted for brevity }</code>
En annotant le champ encryptéPwd avec @JsonIgnore, vous l'excluez explicitement de la réponse JSON.
Exemple Github : [Exemple JsonIgnore](https://github.com/java089/spring-mvc-exclude-fields-json)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!