Ну, во-первых, я думаю, что Джерси делает не то, что здесь, так как Content-Type - это заголовок, который описывает содержимое запроса / ответа, и вы не включаете какой-либо контент в запрос. вместо этого будет основывать свое поведение на заголовке Accepts, но оставляя это в стороне ....
То, что это ajax-вызов, не означает, что тип контента всегда будет /, на клиенте вы можете вызвать setRequestHeader следующим образом:
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://myjaxrs-server/getSearchContacts");
xhr.onreadystatechange = function() {
/* normal javascript to deal with the response goes here */
};
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send("data i'm posting");
Установка заголовка Content-Type в запросе CORS вызовет предполётный запуск. Вы должны поддержать предварительную проверку в коде сервера, иначе запрос CORS будет отклонен. Укажите ваш обычный код для getSearchContacts, но предварительная проверка включится методом OPTIONS:
@OPTIONS
public Response preflight(
@HeaderParam("Access-Control-Request-Method") String requestMethod,
@HeaderParam("Origin") String origin,
@HeaderParam("Access-Control-Request-Headers") String requestHeaders) {
return Response
.ok()
.header("Access-Control-Allow-Origin", "*") // TODO replace with specific origin
.header("Access-Control-Allow-Headers", "Content-Type")
.build();
}
Теперь будет разрешен запрос CORS с пользовательскими заголовками.
Легко ошибиться: насколько я могу судить, даже API-интерфейс электронной таблицы Google не правильно реагирует на предварительные просмотры, а это означает, что вы не можете на самом деле изменить какие-либо данные из JavaScript.