0 Tage Serie
java / intermediate
Snippet

Dynamische JSON-Filterung mit @JsonView

@JsonView ermöglicht es zu steuern, welche Felder eines Objekts je nach Kontext in JSON serialisiert werden. Sie können Marker-Interfaces definieren, um 'Views' zu erstellen (z.B. Public vs. Admin) und diese sowohl auf das Datenmodell als auch auf die Controller-Methode anwenden.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Views {
public interface Public {}
public interface Internal extends Public {}
}
public class User {
@JsonView(Views.Public.class) private String username;
@JsonView(Views.Internal.class) private String email;
}
@RestController
public class UserController {
@GetMapping("/public/user")
@JsonView(Views.Public.class)
public User getPublicUser() { return new User("dev", "[email protected]"); }
}
spring
Erklärung
1
interface Internal extends Public
Vererbung ermöglicht es der Internal-View, alle als Public markierten Felder einzuschließen.
2
@JsonView(Views.Public.class)
Gibt an, dass das annotierte Feld oder die Methode nur Felder verwenden soll, die dieser View zugeordnet sind.
3
@RestController
In Kombination mit @JsonView filtert Spring den Antwort-Body vor dem Senden.