记录jax-rs请求的各个字段

Ars*_*.M. 6 jax-rs

我有一个JAX-RS服务,有很多API来修改和检索有关组织的数据.我还有一个日志记录过滤器,它记录所有请求和响应.现在我引入了无法按原样记录的敏感数据,因此必须对值进行某种混淆.

基本上,我的新请求看起来像这样:

class SetImportantDataRequest {

  String field1;

  @SensitiveData
  String field2;
}
Run Code Online (Sandbox Code Playgroud)

当前请求没有@SensitiveData注释.当前过滤器只占用整个实体流并将其转换为字节数组并打印为UTF_8字符​​串.所以日志输出有这一行:

field1: whateverValue, field2: whateverValue2
Run Code Online (Sandbox Code Playgroud)

我想新的日志输出是这样的:

field1: whateverValue, field2: ****
Run Code Online (Sandbox Code Playgroud)

用于执行此操作的伪代码将位于filter/writerInceptor/messageBodyWriter中的某个位置(尚不确定,需要您的帮助):

if (field has annotation SensitiveData) {
  log.info("****");
} else {
  log.info(field.getValue());
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我正在考虑在请求过滤器中获取流的方向,以某种方式从该流构建请求(至少当前注册的messageBodyWriter执行此操作,因此我应该能够复制该行为),以及什么类型对象构建我认为我从ResourceInfo注入到过滤器.如果您认为这是正确的方法,那么我会问我如何重新使用现有的消息编写功能将流转换为请求对象?