В итоге я нашел обходной путь для возврата "JSON" из контроллера портлета Spring MVC.Вот как я это сделал.
В моем контроллере:
@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.Использование eval для преобразования строки JSON в Javascript представляет угрозу безопасности, но я просто включил его, потому что это самый простой пример.Если вы беспокоитесь о безопасности, используйте JSON-анализатор.