gpt4 book ai didi

jersey - 在 Jersey 中注册自定义 ResourceMethodInvocationHandler

转载 作者:行者123 更新时间:2023-12-04 14:48:19 29 4
gpt4 key购买 nike

我试图在它的 JSON 被解码后拦截一个资源调用。通过阅读一些论坛和帖子,我发现我可以通过实现 来做到这一点。 org.glassfish.jersey.server.spi.internal.ResourceMethodInvocationHandlerProvider .这样做后,我现在被困在试图让我的 自定义资源方法调用处理程序 提供者注册,以便 jersey/hk2 内部调用我的覆盖 公共(public) InvocationHandler create(Invocable invocable) 方法。任何帮助将非常感激!

最佳答案

让我们看一下这种方法:

(使用 Jersey 2.10 和 JSON 序列化测试)

===============

1) 实现一个自定义的 ResourceMethodInvocationHandlerProvider

package com.example.handler;

import java.lang.reflect.InvocationHandler;

import org.glassfish.jersey.server.model.Invocable;
import org.glassfish.jersey.server.spi.internal.ResourceMethodInvocationHandlerProvider;

public class CustomResourceInvocationHandlerProvider implements
ResourceMethodInvocationHandlerProvider {

@Override
public InvocationHandler create(Invocable resourceMethod) {
return new MyIncovationHandler();
}

}

2) 实现一个自定义的 InvocationHandler

package com.example.handler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyIncovationHandler implements InvocationHandler {

@Override
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
// optionally add some logic here
Object result = method.invoke(obj, args);
return result;
}
}

3)创建一个自定义Binder类并注册你的CustomResourceInvocationHandlerProvider

package com.example.handler;

import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.server.spi.internal.ResourceMethodInvocationHandlerProvider;

public class CustomBinder extends AbstractBinder {

@Override
protected void configure() {
// this is where the magic happens!
bind(CustomResourceInvocationHandlerProvider.class).to(
ResourceMethodInvocationHandlerProvider.class);
}
}

4) 可选:在 ResourceMethodInvocationHandlerFactory 中设置断点

只是为了了解 org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory 中 ResourceMethodInvocationHandlerProvider 的选择是如何工作的。

===============

如您所见,最重要的是将您的 CustomResourceInvocationHandlerProvider.class 绑定(bind)到 ResourceMethodInvocationHandlerProvider.class。完成此操作后,HK2 会知道您的 Provider 以及您的 Handler!

希望,我能帮上忙。

关于jersey - 在 Jersey 中注册自定义 ResourceMethodInvocationHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25881675/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com