java - 如何编写一个记录参数和返回值的拦截器?

标签 java jakarta-ee logging interceptor

我正在尝试使用javax拦截器api编写拦截器。它必须记录传递给方法的参数以及该方法的返回值。

下面是一个记录参数的示例代码片段

for(final Object object: context.getParameters()) {
    final Methods[] methods = object.getClass().getMethods();
    for(final Method method: methods){        if(method.getName().startsWith("get")) {
            LOGGER.info(method.getName() + ":" + method.invoke(object));
       }
    }
}

我在记录复杂/用户定义类型时遇到问题。

假设有一个 getter 方法,它返回 Address 类型的学生地址。我的代码不检查调用方法是否返回原始类型或用户定义类型。因此,当调用 getAddress 方法时,它会打印 Address 的哈希码。

我知道我必须通过检查 getter 方法的返回类型来编写某种递归代码。如果 getter 方法返回用户定义的类型,那么我将再次使用反射来查找所有 getter 方法,然后打印它们。

为此,我必须使用 if else 条件,如下所示

伪代码:

type =method.getReturnType().getSimpleName();
if type != string or int or char or boolean and so on
    then
    Call the recursive method which again does the above

我想知道是否有更好的解决方案。我该如何解决这个问题?

最佳答案

使用method.getReturnType().isPrimitive()

https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isPrimitive%28%29

您可以找到一些其他对您有用的 is...() 方法

关于java - 如何编写一个记录参数和返回值的拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252890/

相关文章:

Java:同步(对象)和RejectedExecutionException

java - getResourceAsStream() 总是返回 null

java - JList 自定义渲染器和 HTML

logging - 让 log4cpp 在执行期间创建一个新的日志文件

c++ -std=c++0x 导致段错误( boost 日志记录)

java - 如何在 Eclipse 自动格式化中删除注释后的空格?

java - jstat : -gccapacity output

jakarta-ee - WFLYEJB0043 : A previous execution of timer [timer] is still in progress, 在 [时间] 跳过这个重叠的计划执行

eclipse - 在 Eclipse 上使用 JPA 设置 Spring 3 MVC 项目

python - 为什么 TimedRotatingFileHandler 不删除旧文件?