I have a controller method annotated with @JsonView
. The current requirement is to have this same method return the response using a different JsonView
if the userId
given in parameter matches the authenticated user. How to achieve this knowing that response type should remain ResponseEntity<MyObject>
and should not be changed to MappingJacksonValue
or the sorts.
I'm using Spring, so maybe a way to do this is to have the default JacksonMapper
injected and change its SerializationView
depending on a condition within the method. But the question here is, what to inject and how to achieve this?
// Some controller annotations
@JsonView(Views.Public.class)
public static ResponseEntity<User> getUser(@PathVariable String userId)
User user = userService.getUser(userId);
User authenticated = userService.getAuthenticatedUser();
if (userId.equals(authenticated.getId())) {
// Change the view class to Views.Restricted.class
}
return new ResponseEntity<>(user, HttpStatus.OK);
}
Solved it by Injecting the spring default ObjectMapper and changing its config with the appropriate View class: