2

Spring MVC フレームワークで GWT からコントローラーに JSON メッセージを投稿しようとしています。スプリング コントローラーは GWT からリクエストを受信して​​いますが、リクエストのコンテンツの長さと request.toString() を出力すると、コンテンツの長さが 0 と表示され、request.toString() の出力にはコンテンツがありません。

以下は私のコードと出力です:

以下は、JSON メッセージの投稿を実行する GWT コードです。

@UiHandler("saveButton")
void onClick(ClickEvent e) {

    UserAddJSO jso = (UserAddJSO)JavaScriptObject.createObject().cast();
    jso.setFirstName("Alex");
    jso.setLastName("Cheng");

    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "addUser.aj");
    builder.setHeader("Content-Type", "application/json");
    builder.setRequestData(new JSONObject(jso).toString());
    System.out.println("request data :"+builder.getRequestData());

    try
    {
        builder.sendRequest(null, new RequestCallback()
        {
            public void onError(Request request, Throwable exception)
            {
                Window.alert("on error");
            }
            public void onResponseReceived(Request request, Response response)
            {
                Window.alert("response received :"+response.getStatusCode());
                Window.alert(response.getText());
            }
        });
    }
    catch (RequestException excp)
    {
        Window.alert("exception catched");
    }
}

上記のコードから、リクエスト データが出力されていることがわかります。json 文字列がそこにあります。

以下は私のSpringコントローラーです:

@RequestMapping(value = "**/addUser.aj", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public List<UserAddDTO> getPostStocks(HttpServletRequest request, HttpServletResponse response) throws IOException
{
    List<UserAddDTO> userDTO = new ArrayList<UserAddDTO>();

    JSONObject jObj;
    jObj = new JSONObject(request.getParameterMap());
    System.out.println(jObj.toString());
    System.out.println("xxxxxxxxxxxxx "+request.toString());
    System.out.println("content type :"+request.getContentType());
    System.out.println("inside post method");

    return userDTO;
}

以下は、上記の出力からの出力です。

request data :{"firstName":"Alex", "lastName":"Cheng"}
content type :application/json
content length :0
inside post method
{}
xxxxxxxxxxxxx POST /addUser.aj HTTP/1.1
Accept: */*
Referer: http://127.0.0.1:8888/AlliumApp.html?gwt.codesvr=127.0.0.1:9997
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; Tablet PC 2.0; BRI/2)
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:8888
Connection: Keep-Alive
Content-Type: application/json
Content-Length: 0
Cache-Control: no-cache

上記の出力から、JSON メッセージがリクエスト内にあることがわかります。しかし、コントローラーに到達すると、JSON メッセージはもう存在しません。だから私はjsonメッセージの投稿と受信のために正しい方法をやっていますか?

4

1 に答える 1

0

これを試して:

POSTメソッド

builder.setRequestData("jsonParam=" + new JSONObject(jso).toString());

コントローラ:

@RequestMapping(value = "**/addUser.aj", method = RequestMethod.POST, produces =       "application/json")
@ResponseBody
public List<UserAddDTO> getPostStocks(HttpServletRequest request, HttpServletResponse response, @RequestParam("jsonParam") String jsonParam) {
    ...
    JSONObject jObj;
    jObj = new JSONObject(jsonParam);
}

GETメソッド:

RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
                              "addUser.aj?jsonParam=" + new JSONObject(jso).toString());

とあなたのコントローラーで:

@RequestMapping(value = "**/addUser.aj", method = RequestMethod.GET, produces =   "application/json")
@ResponseBody
public List<UserAddDTO> getPostStocks(HttpServletRequest request, HttpServletResponse response, @RequestParam("jsonParam") String jsonParam) {
    ...
    JSONObject jObj;
    jObj = new JSONObject(jsonParam);
}
于 2012-11-14T09:36:43.510 に答える