Возвращение JSONP из Джерси не работает
Я использую Джерси 2.22.1, и это выглядит так просто. У меня уже есть конечные точки, которые нормально возвращают json, и теперь я хочу, чтобы они возвращали jsonp. Похоже, что все, что мне нужно сделать, это аннотировать @JSONP, но когда я тестирую, я не вижу оболочки обратного вызова.
Из документов:
@GET
@JSONP
@Produces({"application/json", "application/javascript"})
public JaxbBean getSimpleJSONP() {
return new JaxbBean("jsonp");
}
Мой код:
@GET
@Path("/jsonp")
@JSONP
@Produces({"application/json", "application/javascript"})
public Response getHeathJsonp() {
return Response.ok().entity(ApplicationStatus.getNew("HEALTHY", "Application is healthy!")).build();
}
Мой вызов jquery:
$.ajax({
url: "http://foo.com/api/health/jsonp",
dataType: 'jsonp',
type: 'GET',
data: "",
success: function(data) {
console.log(data);
},
error: function(xhr, status, err) {
console.log(err.toString());
}
});
Мой ответ:
{
"dateTime": {
"monthOfYear": 1,
"dayOfMonth": 17,
"year": 2016,
"dayOfWeek": 7,
"era": 1,
"dayOfYear": 17,
"centuryOfEra": 20,
"yearOfEra": 2016,
"yearOfCentury": 16,
"weekOfWeekyear": 2,
"hourOfDay": 12,
"minuteOfHour": 39,
"secondOfMinute": 2,
"millisOfSecond": 666,
"millisOfDay": 45542666,
"weekyear": 2016,
"secondOfDay": 45542,
"minuteOfDay": 759,
"chronology": {
"zone": {
"uncachedZone": {
"cachable": true,
"fixed": false,
"id": "America/New_York"
},
"fixed": false,
"id": "America/New_York"
}
},
"zone": {
"uncachedZone": {
"cachable": true,
"fixed": false,
"id": "America/New_York"
},
"fixed": false,
"id": "America/New_York"
},
"millis": 1453052342666,
"afterNow": false,
"equalNow": true,
"beforeNow": false
},
"description": "Application is healthy!",
"status": "HEALTHY"
}
Мой компонент ApplicationStatus: пакет com.foo.model.application;
import org.joda.time.DateTime;
public class ApplicationStatus {
private String _status;
private String _description;
private DateTime _dateTime;
private ApplicationStatus() { }
public static ApplicationStatus getNew(String status, String desc) {
ApplicationStatus stat = new ApplicationStatus();
stat.setDateTime(DateTime.now());
stat.setStatus(status);
stat.setDescription(desc);
return stat;
}
public String getStatus() {
return _status;
}
public void setStatus(String _status) {
this._status = _status;
}
public String getDescription() {
return _description;
}
public void setDescription(String _description) {
this._description = _description;
}
public DateTime getDateTime() {
return _dateTime;
}
public void setDateTime(DateTime _dateTime) {
this._dateTime = _dateTime;
}
}
Зависимости проекта:
dependencies {
compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.22.1'
compile 'org.glassfish.jersey.core:jersey-server:2.22.1'
compile 'org.glassfish.jersey.core:jersey-common:2.22.1'
compile 'org.glassfish.jersey.core:jersey-client:2.22.1'
compile 'org.glassfish.jersey.media:jersey-media-json-processing:2.22.1'
compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.22.1'
compile 'org.glassfish.jersey.media:jersey-media-multipart:2.22.1'
compile 'org.glassfish.jersey.media:jersey-media-sse:2.22.1'
compile 'com.yammer.metrics:metrics-graphite:2.2.0'
compile 'com.google.guava:guava:18.0'
compile 'joda-time:joda-time:2.9'
compile 'log4j:log4j:1.2.16'
testCompile 'junit:junit-dep:4.10'
testCompile 'org.slf4j:slf4j-simple:1.6.1'
testCompile 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:2.22.1'
}
Сериализация json для этого bean-компонента прекрасно работает с моей обычной конечной точки json, но jsonp, похоже, не работает... Это так просто, что я даже не могу понять, что может быть не так.