1

問題がどこにあるのかはよくわかりませんが、次のことがわかります。

最初にGWTRequestBuilderを使用しました:

RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "/myRESTResource/test");
rb.setHeader("Content-Type", "application/json");
rb.setRequestData("");
rb.setCallback(new RequestCallback() {
    @Override
    public void onResponseReceived(Request request, Response response) {
        Window.alert(response.getText());
    }
    @Override
    public void onError(Request request, Throwable exception) {
        Window.alert(exception);
    }
});
rb.send();

私の春のコントローラー:

@Controller
@RequestMapping("/myRESTResource")
public class TranslationController {
    @RequestMapping(value="/{param}", method=RequestMethod.GET)
    public @ResponseBody String get(@PathVariable("param") String param, HttpServletResponse response) {
        // get some data and output it as JSON
    }
}

Chrome-Browserで、で返された応答を確認できますContent-type: text/html; charset=iso-8859-1Window.alert()大丈夫だった。

今、私はrestygwtに切り替えたいと思いました。私が使用しているResource

Resource r = new Resource("myRESTResource/test");
r.get().send(new JsonCallback() {
    @Override
    public void onSuccess(Method method, JSONValue response) {
        Window.alert(response.toString());
    }

    @Override
    public void onFailure(Method method, Throwable exception) {
        Window.alert(exception.getLocalizedMessage());
    }
});

ここで私のSpringControllerは。で戻りますContent-type: application/json。ASCII文字のWindow.alert()場合は問題ありませんが、特別なものはすべて、内部に疑問符が付いたブラックボックスになります。この問題は、GWT開発モード(統合されたJettyを備えたEclipse 4.2)で発生し、外部のTomcat7にもデプロイされます。

restygwtを使用して置く場合

response.setCharacterEncoding("ISO-8859-1");

Spring Controller内では、Window.alert()期待どおりにデータが表示されます。

response.setCharacterEncoding("ISO-8859-1");すべてのControllerメソッドの内部に書き込みたくないことは明らかです。

これを修正する簡単な方法があるといいのですが。ありがとうございました。

4

2 に答える 2

1

解決策は非常に簡単です。

Resourceサーバーから取得したいエンコーディングをrestygwtと言うだけです:

Accept: application/json; charset=utf-8

また:

Accept: application/json; charset=iso-8859-1

コード例:

HashMap<String, String> header = new HashMap<String, String>();
header.put(Resource.HEADER_ACCEPT, Resource.CONTENT_TYPE_JSON+"; charset=utf-8");

Resource r = new Resource("myRESTResource/test", header);
r.get().send(new JsonCallback() {
    @Override
    public void onSuccess(Method method, JSONValue response) {
        Window.alert(response.toString());
    }

    @Override
    public void onFailure(Method method, Throwable exception) {
        Window.alert(exception.getLocalizedMessage());
    }
});

Spring は予想されるエンコーディングを自動的に返します!

于 2012-07-09T10:31:24.097 に答える
0

サーバーからjsonを生成していないようです。文字列を返すだけです。

これをあなたのサービスに入れてみてください:

@RequestMapping(value="/{param}", method=RequestMethod.GET**, produces = "application/json"**)

RestClientなどのツールを使用して、サーバーが実際にjsonを返しているかどうかを確認できます。

于 2012-11-01T20:18:27.697 に答える