Spring 在控制器方法之外访问@RequestBody 对象
Spring Access @RequestBody object outside Controller Method
我有一个组件应该能够访问在请求中发送的@RequestBody 对象并检查它是否属于特定类型。
有没有办法在调用控制器方法(声明@RequestBody 参数的地方)时无需再次反序列化对象并且无需在某处手动保存@RequestBody?
我想要一个独立于其余控制器工作且无需修改其方法的解决方案。
谢谢!
如 here 所述,使用扩展 RequestBodyAdviceAdapter
的 class 可以解决问题。
@ControllerAdvice
public class CustomRequestBodyAdviceAdapter extends RequestBodyAdviceAdapter {
@Override
public boolean supports(MethodParameter methodParameter, Type targetType,
Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
Class<? extends HttpMessageConverter<?>> converterType) {
return super.afterBodyRead(body, inputMessage, parameter, targetType, converterType);
}
}
如果 Class 应该能够处理请求,方法 supports
应该 return 为真。在 afterBodyRead
中,您可以访问对象并对其进行处理。
我有一个组件应该能够访问在请求中发送的@RequestBody 对象并检查它是否属于特定类型。
有没有办法在调用控制器方法(声明@RequestBody 参数的地方)时无需再次反序列化对象并且无需在某处手动保存@RequestBody?
我想要一个独立于其余控制器工作且无需修改其方法的解决方案。
谢谢!
如 here 所述,使用扩展 RequestBodyAdviceAdapter
的 class 可以解决问题。
@ControllerAdvice
public class CustomRequestBodyAdviceAdapter extends RequestBodyAdviceAdapter {
@Override
public boolean supports(MethodParameter methodParameter, Type targetType,
Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
Class<? extends HttpMessageConverter<?>> converterType) {
return super.afterBodyRead(body, inputMessage, parameter, targetType, converterType);
}
}
如果 Class 应该能够处理请求,方法 supports
应该 return 为真。在 afterBodyRead
中,您可以访问对象并对其进行处理。