向 RouterNanoHTTPD 处理程序添加参数
Add arguments to RouterNanoHTTPD Handler
我正在使用 NanoHTTPD
的 RouterNanoHTTPD
添加路由映射。
调用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);
现在调用参数化构造函数。现在标记为已解决,但不确定这是否是正确的方法,或者库的创建者是否特别不希望以这种方式完成。
我正在使用 NanoHTTPD
的 RouterNanoHTTPD
添加路由映射。
调用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);
现在调用参数化构造函数。现在标记为已解决,但不确定这是否是正确的方法,或者库的创建者是否特别不希望以这种方式完成。