Explain how to provide serialization view programmatically

Closes gh-25596
This commit is contained in:
Rossen Stoyanchev 2020-09-07 21:17:12 +01:00
parent b6ff12d2f5
commit 94c91c9e9c
1 changed files with 33 additions and 0 deletions

View File

@ -3403,6 +3403,39 @@ which allow rendering only a subset of all fields in an `Object`. To use it with
NOTE: `@JsonView` allows an array of view classes, but you can specify only one per NOTE: `@JsonView` allows an array of view classes, but you can specify only one per
controller method. If you need to activate multiple views, you can use a composite interface. controller method. If you need to activate multiple views, you can use a composite interface.
If you want to do the above programmatically, instead of declaring an `@JsonView` annotation,
wrap the return value with `MappingJacksonValue` and use it to supply the serialization view:
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
.Java
----
@RestController
public class UserController {
@GetMapping("/user")
public MappingJacksonValue getUser() {
User user = new User("eric", "7!jd#h23");
MappingJacksonValue value = new MappingJacksonValue(user);
value.setSerializationView(User.WithoutPasswordView.class);
return value;
}
}
----
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
.Kotlin
----
@RestController
class UserController {
@GetMapping("/user")
fun getUser(): MappingJacksonValue {
val value = MappingJacksonValue(User("eric", "7!jd#h23"))
value.serializationView = User.WithoutPasswordView::class.java
return value
}
}
----
For controllers that rely on view resolution, you can add the serialization view class For controllers that rely on view resolution, you can add the serialization view class
to the model, as the following example shows: to the model, as the following example shows: