Вот что я сделал. В моих маршрутах я установил формат ответа на javascript с помощью:
GET /api/projects.json Api.projects (формат: 'json')
Затем для контроллера в Api я использовал flexjson и сделал это:
public static void projects(String p) {
JSONSerializer json = new JSONSerializer();
List<Project> projects = Project.all().fetch(3);
renderJSON(p + '(' + json.serialize(projects) + ')');
}
Так что теперь вызовы jsonp можно сделать, нажав /api/projects.json?p=whither, и результат будет:
whatever([{"your":"json"}])
Вы также можете использовать flexjson для сериализации только тех частей объекта, которые вы хотите выставить.
Тестирование с помощью jquery:
$.ajax({
url: "http://api/projects.json",
dataType: "jsonp",
jsonp : 'p',
crossDomain : true,
success: function(data){
console.log(data);
}
});