Есть ли способ обнаружить предварительный запрос в REST API Jersey?

Есть ли способ узнать заголовки предварительного запроса в Java-Джерси или есть способ отправить другой ответ на предварительный запрос?

Предположим, у меня есть следующий код:

@Path("/releaseClient")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public JSONObject  releaseClient(JSONObject clientAndUser, @Context HttpServletRequest request) throws JSONException{
    int clientId = clientAndUser.getInt("id");
    String userId = clientAndUser.getString("user");
    JSONObject res = new JSONObject();

    // Check if profile is locked by current user and if so release profile
    if(clientLockService.unlockClient(clientId, userId)){
        res.put("success", clientService.returnClientInfo(clientId));
    } else {
    // If not then set error message
        res.put("error", "Profile is not locked by current user");
    }
    return res;
}

Теперь сначала браузер отправит предварительный запрос. Есть ли способ, где я могу манипулировать заголовками ответа для предполётного запроса?

1 ответ

Решение

Вы не можете сделать это в методе ресурса, если вы не хотите создать кучу @OPTIONS методы, поскольку предварительная проверка является запросом OPTIONS. Вместо этого вы должны использовать фильтр. Вы можете увидеть пример реализации здесь. Это не самая лучшая реализация, так как на самом деле она не проверяет предварительную проверку, она просто отправляет заголовки CORS для всех запросов. Если вы посмотрите внизу поста, он будет ссылаться на реализацию фильтра RESTEasy для обработки CORS. Это намного лучшая реализация. Вы можете изучить его, чтобы получить некоторые идеи

Другие вопросы по тегам