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 中,您可以访问对象并对其进行处理。