Heim  >  Artikel  >  Java  >  Wie können Sie Felder dynamisch aus Java-Objekt-JSON-Antworten in Spring MVC-Anwendungen ausschließen?

Wie können Sie Felder dynamisch aus Java-Objekt-JSON-Antworten in Spring MVC-Anwendungen ausschließen?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 16:49:02414Durchsuche

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

Felder aus Java-Objekten dynamisch in JSON-Antworten mit Spring MVC ignorieren

In Spring MVC-Anwendungen müssen wir häufig bestimmte Felder selektiv ausschließen Felder werden nicht in JSON-Antworten einbezogen. Dies ist in der Regel erforderlich, um den Datenschutz zu wahren und Sicherheitsvorschriften einzuhalten. Um dies zu erreichen, stehen uns mehrere Optionen zur Verfügung.

Verwendung von @JsonIgnoreProperties

Die einfachste Lösung besteht darin, Ihr POJO mit @JsonIgnoreProperties zu kommentieren und die gewünschten Feldnamen anzugeben ausschließen. Zum Beispiel:

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

Dadurch wird Spring MVC angewiesen, die in der Annotation @JsonIgnoreProperties angegebenen Felder zu ignorieren, wenn das Objekt in JSON serialisiert wird.

Verwendung von @JsonIgnore mit Jackson-Annotationen

Wenn Sie eine detailliertere Kontrolle über die ausgeschlossenen Felder bevorzugen, können Sie die Jackson-Annotationen aus der Jackson-Core-Bibliothek verwenden. Beispiel:

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

@JsonIgnore
public String getEncryptedPwd() {
    return encryptedPwd;
}</code>

Das Hinzufügen von @JsonIgnore vor der Getter-Methode verhindert, dass das Feld in die JSON-Antwort aufgenommen wird.

Verwenden eines benutzerdefinierten JSON-Serializers

Alternativ können Sie einen benutzerdefinierten JSON-Serializer erstellen, um die Logik zum dynamischen Ausschließen von Feldern basierend auf Ihren Anforderungen zu definieren. Hier ist ein Beispiel mit 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>

Sie können dann den benutzerdefinierten Serialisierer in Ihrem REST-Controller verwenden:

<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>

Indem Sie über den Parameter „ignoredFields“ eine Liste von Feldern bereitstellen, die ignoriert werden sollen, Sie können die ausgeschlossenen Felder in der JSON-Antwort dynamisch steuern.

Das obige ist der detaillierte Inhalt vonWie können Sie Felder dynamisch aus Java-Objekt-JSON-Antworten in Spring MVC-Anwendungen ausschließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn