在过去的六个小时里,我在 Google 和 stackoverflow 上搜索了这个问题的答案。我最初是一名 PHP 开发人员,所以请耐心等待 - 从 PHP Controller 返回一个 JSON 数组是微不足道的。
我正在使用 Spring MVC 3.0,我只是想将一个 JSON 对象从我的 Spring MVC Controller 返回给一些 Javascript。目前似乎没有简单的方法可以使用 portlet (https://jira.springsource.org/browse/SPR-7344) 来做到这一点。我看到的解决方案建议创建另一个提供 JSON 响应的 DispatcherServlet,但我还没有找到一个有据可查的例子。如果有人知道完成此操作的好方法(最好带有注释),请告诉!
最佳答案
我最终找到了一种从 Spring MVC portlet Controller 返回“JSON”的解决方法。这是我如何做到的。
在我的 Controller 中:
@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 匹配。使用 eval 将 JSON 字符串转换为 Javascript 会带来安全风险,但我只是包含它,因为它是最简单的示例。如果您担心安全性,请使用 JSON 解析器。
关于ajax - 如何使用基于 Spring MVC 注释的 Portlet Controller 通过 AJAX 呈现 JSON View /响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784122/