向 RouterNanoHTTPD 处理程序添加参数

Add arguments to RouterNanoHTTPD Handler

我正在使用 NanoHTTPDRouterNanoHTTPD 添加路由映射。

调用addRoute(String uri, Class<?> handler, Object ... params)不会调用参数化构造函数来实例化Class<?> handler的对象。有人能做到吗?

问题与 this Github Issue of the NanoHTTPD 上发布的问题完全相同。

public class SoapServer extends RouterNanoHTTPD {

    @Override
    public void addMappings() {
        super.addMappings();

        // works fine when there are no parameters passed
        addRoute("/onvif/device_service", DeviceServiceHandler.class);

        // MediaServiceHandler instantiated with empty constructor;
        // it doesn't create the class with these arguments in the constructor
        addRoute("/onvif/media_service", MediaServiceHandler.class,
            systemServices, userRepository, authenticators);
}

能够通过克隆和更改发生对象实例化的库部分来做到这一点。

而不是

Object object = handler.newInstance();

我已将这部分重写为:

Constructor<?> constructor = handler.getDeclaredConstructors()[0];
constructor.setAccessible(true);
Object object = constructor.newInstance(initParameter);

现在调用参数化构造函数。现在标记为已解决,但不确定这是否是正确的方法,或者库的创建者是否特别不希望以这种方式完成。