Maison >Java >javaDidacticiel >Comment ignorer dynamiquement les champs dans les réponses Spring MVC JSON ?

Comment ignorer dynamiquement les champs dans les réponses Spring MVC JSON ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 15:47:02582parcourir

How to Dynamically Ignore Fields in Spring MVC JSON Responses?

Ignorer dynamiquement les champs des objets Java dans les réponses JSON de Spring MVC

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn