具有类型化响应的 JsonpRequestBuilder 抛出 InCompatibleClassChangeError

JsonpRequestBuilder with typed response throws InCompatibleClassChangeError

我有一个现有的应用程序,我正在向其添加 "Suggested Products" 功能,但我遇到了 JSONP 响应未正确转换为类型化 JsArray 的问题。我希望有人能告诉我我做错了什么?

我已经定义了将从服务器返回的类型 class:

import com.google.gwt.core.client.JavaScriptObject;

public class SuggestedProduct extends JavaScriptObject {
    protected SuggestedProduct() {}
    public final native String getFormName();
    public final native String getImageURL();
}

我有一个方法使用 JsonpRequestBuilder 来触发获取我的 JSON.

的请求
private void loadSuggestedProducts() {
        JsonpRequestBuilder builder = new JsonpRequestBuilder();
        builder.requestObject(buildSuggestedProductURL(), new AsyncCallback<JsArray<SuggestedProduct>>() {
            public void onFailure(Throwable caught) {
                //Handle errors
            }

            public void onSuccess(JsArray<SuggestedProduct> data) {
                if ( data == null) {
                    //Handle empty data
                    return;
                }
                SafeHtmlBuilder sb = new SafeHtmlBuilder();
                sb.appendHtmlConstant("<h4>Suggested Products:</h4>");
                for (int i=0; i < data.length(); i++) {
                    SuggestedProduct product = data.get(i); //<- This line throws the exception
                    sb.appendHtmlConstant("<div class=\"card\">");
                    sb.appendHtmlConstant("<img class=\"card-img-top\" src=\"" + product.getImageURL() + "\" alt=\"" + product.getFormName() + "\">");
                    sb.appendHtmlConstant("<div class=\"card-body\">");
                    sb.appendHtmlConstant("<h5 class=\"card-title\">" + product.getFormName() + "</h5>");
                    sb.appendHtmlConstant("<a onclick=\"javascript:addItems();\" class=\"cmd-add\">Add <i aria-hidden=\"true\" class=\"fa fa-plus-circle\"></i></a>");
                    sb.appendHtmlConstant("</div></div>");                  
                }
                view.getSuggestedProducts().setInnerSafeHtml(sb.toSafeHtml());
                }
            });
}

当我尝试使用响应中的 SuggestedProduct 时,出现错误:

java.lang.IncompatibleClassChangeError: Found interface com.google.gwt.cor.client.JsArray, but class was expected

我一直在关注 guide in the GWT documentation。我看不出我正在尝试的和他们所说的有什么区别。当我调试时,返回的数据看起来好像是一个 SuggestedProducts 数组,所以我不知道如何继续。任何帮助,将不胜感激。

经过仔细检查,我意识到我的覆盖类型缺少方法主体,用于从它们所代表的 JSON 对象中 return 的哪些字段。解决方法是包含正确的 JSNI 方法定义。

import com.google.gwt.core.client.JavaScriptObject;

public class SuggestedProduct extends JavaScriptObject {
    protected SuggestedProduct() {}
    public final native String getFormName() /*-{ return this.formname; }-*/;
    public final native String getImageURL() /*-{ return this.imageurl; }-*/;
}