-1

我写了一个 Spring REST 应用程序。我用 curl 命令对其进行了测试,它确实有效。

在另一个 GWT Ajax 应用程序中,我有一个 RequestBuilder 对象,它不适用于我的 Spring Rest:调用 sendRequest 方法后,该事件onResponseReceived被触发,但该getText方法返回一个空字符串。

这是我的 spring servlet.xml 配置文件的一部分

<bean id="jsonmembertemplate" 
      class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" >
    <property name="contentType" value="text/javascript;charset=UTF-8"/>
    <property name="disableCaching" value="false"/>
</bean>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" /> 

和我的控制器类的一部分

@RequestMapping(method = RequestMethod.GET, value="/member/get/{memberid}")
public String getMember(Model model, @PathVariable("memberid") int id, HttpServletResponse response) {
    model.addAttribute("member", memberDao.get(id));
    return "jsonmembertemplate";
}

和gwt代码

private RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "http://localhost:8080/depna-nat-server/member/get/1?");



try {
                rb.setHeader("Content-Type", "text/javascript;charset=UTF-8");
                rb.sendRequest(null, new RequestCallback() {

                    @Override
                    public void onResponseReceived(Request request, Response response) {
                        Window.alert(Integer.toString(response.getStatusCode()));
                        Window.alert(response.getStatusText());
                        Window.alert(Integer.toString(response.getText().length()));
                        area.setText(response.getText());
                    }

                    @Override
                    public void onError(Request request, Throwable exception) {
                        Window.alert("fail");
                    }
                });
            } catch (RequestException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
4

1 回答 1

0

我有几个 gwt 应用程序使用 spring 提供的 json 和 xml rest 服务,我们使用 spring 而不是 gwt(rpc 或 rf),因为这些服务也提供给 3party 应用程序。

我用 RequestBuilder 开始了我的第一个项目,我们没有任何问题,所以也许你的代码有问题,你能检查流量并发布你遇到的错误吗?

如果您正在运行跨域问题(statusCode=0 通常意味着它),请在您的 servlet 容器中添加一个过滤器,查看此文档

我最终选择使用gwtquery-ajaxgquery-data-binding,因为使用这些服务并将它们映射到 java 对象变得非常容易。

于 2012-12-21T08:58:39.087 回答