Java 构建器模式可从 JavaRhino 中的脚本访问

Java builder pattern accessible from JavaScript in Rhino

我想在 Rhino 中实现如下(在 JavaScript 中)。

myService.http('http://localhost:9000')
         .path('foo/bar')
         .get();

然后得到最终的 get() return 实际响应。它仿照 Java.

中 Jersey 的 Web 请求构建器

我目前的 Java 代码是:

class MyHttpRequestBuilder {
    private final String baseUrl;
    private final StringBuilder path = new StringBuilder();
    private final Map<String, String> queryParams = new HashMap<>();
    private final Map<String, String> headers = new HashMap<>();

    public MyHttpRequestBuilder(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    public MyHttpRequestBuilder path(String path) {
        this.path.append(path);
        return this;
    }

    public MyHttpRequestBuilder header(String headerKey, String headerValue) {
        headers.put(headerKey, headerValue);
        return this;
    }

    public MyHttpRequestBuilder queryParam(String queryKey, String queryValue) {
        queryParams.put(queryKey, queryValue);
        return this;
    }

    public String get() {
        return "Testing - Accessed " + baseUrl + " with path " + path;
    }
}

我已经在服务 class 中注册了它,如下所示:

public class MyService {
    public MyHttpRequestBuilder http(String baseUrl) {
        return new MyHttpRequestBuilder(baseUrl);
    }
}

然后我将根据各种示例将其添加到 Rhino 上下文中的脚本化容器中。

它工作 很好 如果我只是直接调用函数 return 一个字符串或另一个对象。

不幸的是,"return this;" 的构建器方法(这将允许在 JS 端使用更流畅的代码)不想玩球。这甚至可以用 Rhino 实现吗?

我正在使用 Java 8 和 Rhino 1.7.7.1。

您的构建器类型对脚本引擎不可见。做到 public:

public class MyHttpRequestBuilder {