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

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 16:49:02414parcourir

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>

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>

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>

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>

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!

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