5

この質問に対する答えを得るために、私は過去 6 時間かけて Google と stackoverflow を精査しました。私はもともと PHP 開発者なので、ご容赦ください。PHP コントローラーから JSON 配列を返すのは簡単なことです。

Spring MVC 3.0 を使用しています。JSON オブジェクトを Spring MVC コントローラーから Javascript に戻したいだけです。現在、ポートレット (https://jira.springsource.org/browse/SPR-7344) を使用してこれを行う簡単な方法はないようです。私が見た解決策は、JSON 応答を提供する別の DispatcherServlet を作成することを提案していますが、これについて十分に文書化された例をまだ見つけていません。誰かがこれを達成するための良い方法を知っているなら(できれば注釈を使って)、教えてください!

4

5 に答える 5

6

Spring MVCポートレットコントローラーから「JSON」を返す回避策を見つけました。これが私がやった方法です。

私のコントローラーで:

@ResourceMapping("ajaxTest")
public void ajaxHandler(ResourceRequest request, ResourceResponse response)
        throws IOException {
    OutputStream outStream = response.getPortletOutputStream();
    StringBuffer buffer = new StringBuffer();

    Map<String, String> testMap = new HashMap<String, String>();
    testMap.put("foo", "bar");

    String test = new JSONObject(testMap).toString();
    buffer.append(test);

    outStream.write(buffer.toString().getBytes());
}

「view.jsp」では:

<portlet:resourceURL var="ajaxtest" id="ajaxTest"/>

<script type="text/javascript">
  $.get('<%= ajaxtest %>', function(response) {
    var json = eval('(' + response + ')');
  });
</script>

@ResourceMapping アノテーションは現在、JSON を返すことをサポートしていないため、org.json.JSONObject を使用してマップを JSON オブジェクトに変換し、このオブジェクトの toString() を返しました。@ResourceMapping の値は、resourceURL の ID と一致する必要があります。JSON 文字列を Javascript に変換するために eval を使用すると、セキュリティ上のリスクが生じますが、これは最も単純な例であるため、ここに含めました。セキュリティが心配な場合は、JSON パーサーを使用してください。

于 2011-04-27T19:02:19.997 に答える
3

http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/は、現時点ではポートレットには適用されません。参照: https://jira.springsource.org/browse/SPR-7344

于 2011-12-17T22:35:56.603 に答える
2

Spring 3.0.5 では、次の 2 つの簡単な変更を加えて動作させることができました。

  • ResourceRequest 本体から JSON のオブジェクトを解析するカスタム WebArgumentResolver の実装
  • コントローラーのメソッドから MappingJacksonJsonView を返します。

Spring 3.1 でのみ利用可能 - MappingJacksonJsonView で setExtractValueFromSingleKeyModel を使用することをお勧めします

誰かが興味を持っている場合は、Javaコードを投稿できます

于 2011-12-23T13:43:03.157 に答える
0

@alexの回答について詳しく説明します。

    @ResourceMapping(value = "showJson")
    public ModelAndView showJson(ResourceRequest request) {
    ModelAndView mav = new ModelAndView(new 
                                   MappingJacksonJsonView());
    mav.addObject("key", myBeanToBeSerializedAsJson);
    return mav;
    }
于 2017-07-18T15:56:03.157 に答える
-1

Spring 3 以降、json のアプリケーション タイプ (つまり、jQuery の .getJSON および .postJSON) で ajax get/post を使用する場合、コントローラーは自動的に json に変換されます。この機能は、Spring MVC のサーブレットとポートレットのバリエーション間で同じです。

ここにそれを説明するブログ投稿があります。

http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

于 2011-07-18T21:01:46.917 に答える