Spring controller method invocation advice

345 Views Asked by At

I have a controller that exposes the following endpoint:

@RequestMapping("/all-users")
List<User> getAllUsers() {
    ...
}

I have also an annotation that helps me out with versioning of those endpoints, which ends up on something like this:

@RequestMapping("/all-users")
@Version(version=1, latests=LATEST_ALL_USERS)
List<User> getAllUsers() {
    ...
}

Now I want to introduce an additional standard behavior to all handlers mapped wish method contains @Version annotation which will simply wrap the response object into another object which contains the current version and latest version of the invoked method. Some information to build this object are provided by @PathVariable parameters. I'm trying to find a hook that allows me that but no luck so far.

I tried first to have a custom RequestResponseBodyMethodProcessor but if I add it will not take any effect because the original RequestResponseBodyMethodProcessor comes before and I don't want to remove the ResponseBody from my endpoints.

Afterward I tried to go for the mapping instead, once I cannot handle it on the processor, maybe I could handle that on mapping time introducing my code pre and post method invocation, but got stuck on the point where mapping is registered where a method object is needed, not allowing me to introduce my advice code.

Is there any way to get this done?

Edit:

Some of the information needed to build the new returned object are provided as @PathVariables, and are available on end-point method call.

0

There are 0 best solutions below