Maison > Java > javaDidacticiel > le corps du texte

Comment exclure dynamiquement des champs des réponses JSON d'objet Java dans les applications Spring MVC ?

Susan Sarandon
Libérer: 2024-10-26 16:49:02
original
409 Les gens l'ont consulté

How can you dynamically exclude fields from Java object JSON responses in Spring MVC applications?

Ignorer dynamiquement les champs d'un objet Java dans les réponses JSON avec Spring MVC

Dans les applications Spring MVC, nous rencontrons souvent le besoin d'exclure sélectivement certains les champs ne soient pas inclus dans les réponses JSON. Cela est généralement nécessaire pour préserver la confidentialité des données et respecter les règles de sécurité. Pour y parvenir, nous avons plusieurs options disponibles.

Utiliser @JsonIgnoreProperties

La solution la plus simple est d'annoter votre POJO avec @JsonIgnoreProperties et de spécifier les noms de champs que vous souhaitez exclure. Par exemple :

<code class="java">@Entity
@Table(name = "user")
@JsonIgnoreProperties({ "encryptedPwd", "createdBy", "updatedBy" })
public class User implements java.io.Serializable {
    // Your getters and setters here...
}</code>
Copier après la connexion

Cela demandera à Spring MVC d'ignorer les champs spécifiés dans l'annotation @JsonIgnoreProperties lors de la sérialisation de l'objet en JSON.

Utilisation de @JsonIgnore avec Jackson Annotations

Si vous préférez avoir un contrôle plus granulaire sur les champs exclus, vous pouvez utiliser les annotations Jackson de la bibliothèque jackson-core. Par exemple :

<code class="java">import com.fasterxml.jackson.annotation.JsonIgnore;

@JsonIgnore
public String getEncryptedPwd() {
    return encryptedPwd;
}</code>
Copier après la connexion

L'ajout de @JsonIgnore avant la méthode getter empêchera le champ d'être inclus dans la réponse JSON.

Utilisation d'un sérialiseur JSON personnalisé

Vous pouvez également créer un sérialiseur JSON personnalisé pour définir la logique d'exclusion des champs de manière dynamique en fonction de vos besoins. Voici un exemple utilisant Jackson :

<code class="java">import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;

public class IgnoreFieldsSerializer extends JsonSerializer<User> {

    private List<String> ignoredFields;

    // Constructor to set the list of ignored fields

    @Override
    public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();

        for (Field field : user.getClass().getDeclaredFields()) {

            // Check if the field is in the ignored list
            if (!ignoredFields.contains(field.getName())) {
                jsonGenerator.writeFieldName(field.getName());
                jsonGenerator.writeObject(field.get(user));
            }
        }
        jsonGenerator.writeEndObject();
    }
}</code>
Copier après la connexion

Vous pouvez ensuite utiliser le sérialiseur personnalisé dans votre contrôleur REST :

<code class="java">@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{userId}")
    public ResponseEntity<User> getUser(@PathVariable Integer userId) {
        User user = userService.get(userId);

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new SimpleModule().addSerializer(User.class, new IgnoreFieldsSerializer(ignoredFields)));
        
        return ResponseEntity.ok(mapper.writeValueAsString(user));
    }
}</code>
Copier après la connexion

En fournissant une liste de champs à ignorer via le paramètre ignoréFields, vous pouvez contrôler dynamiquement les champs exclus dans la réponse 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!