Json Views können dazu verwendet werden, um je nach Anwendungsfall mehr oder weniger Parameter eines Objekts in ein Json zu Serialisieren/Deserialisieren.

Dafür müssen verschiedene Views definiert werden:

public class Views {
    public static class Minimal { }
    public static class Extended extends Minimal { }
}

Im DTO werden die Parameter den Views zugeordnet:

public class User {
    @JsonView(Views.Minimal.class)
    public int id;

    @JsonView(Views.Minimal.class)
    public String name;
    
    @JsonView(Views.Extended.class)
    public String category;
}

Werden keine JsonView Annotation an einem Parameter gesetzt, sind automatisch alle konfigurierten Views erlaubt.

Zur Umwandlung in den richtigen Typ muss nur noch am Controller / der Ressource der gewünscht View konfiguriert werden:

@JsonView(Views.Minimal.class)
@RequestMapping("/user/{id}")
public User getUser(@PathVariable int id) {
    return userService.getUserBy(id);
}

Ergibt:

{"id": 1, "name": "Max Mustermann"}

Bei der Konfiguration von:


@JsonView(Views.Extended.class)
@RequestMapping("/user/{id}")
public User getUserDetails(@PathVariable int id) {
    return userService.getUserBy(id);
}

wäre das Ergebnis:

{"id": 1, "name": "Max Mustermann", "category":  "INTERNAL"}

Link: siehe auch Baeldung