Nano Hash - криптовалюты, майнинг, программирование

HTTP-связь Jersey/Jquery и данные JSON

У меня возникли проблемы с тем, чтобы Джерси и Jquery обменивались данными в формате JSON. В следующем минимальном примере вызывающему клиенту JQuery всегда возвращается HTTP 204.

@Path("/path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class Resource {
    @POST
    public ReturnData postSomething(@Valid Data data) {
      Log("success");
      ...
      ReturnData returnData = ...;
      return returnData;
    }
}

Я использую следующий код JQuery, и функция ошибки вызывается после каждого сообщения.

$.ajax({
     type: "POST",
     contentType: "application/json; charset=utf-8",
     url: url,
     data: '{"data": "data"}',
     dataType: "json",
     error: function(data){
          alert("fail");
     },
     success: function(data){
          alert("success");
     }
     });

В Firebug я вижу следующий HTTP-запрос/ответ с описанной выше настройкой:

OPTIONS /path HTTP/1.1
Host: 192.168.15.109:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 204 No Content
Date: Thu, 24 May 2012 16:10:57 GMT
Allow: OPTIONS,POST

Сначала я попробовал установку без contentType: «application/json; charset=utf-8» в сообщении JQuery, которое получилось следующим образом:

POST /path HTTP/1.1
Host: 192.168.15.109:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost/test.html
Content-Length: 104
Origin: http://localhost
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 415 Unsupported Media Type
Date: Thu, 24 May 2012 16:08:55 GMT
Content-Type: text/plain;charset=UTF-8
Cache-Control: must-revalidate,no-cache,no-store
Content-Length: 72
Cache-Control: no-cache

Я думаю, что клиент и сервер по какой-то причине не могут найти тип данных, с которым они оба согласны. Мне кажется странным, что заголовок accept не включает JSON при установке для contentType значения JSON.

Журнал("Успех"); на стороне сервера никогда не выполняется.

Может ли кто-нибудь указать мне правильное направление?

24.05.2012

  • Кстати: тест Apache HttpClient может отправлять и получать json с сервера без проблем. 24.05.2012
  • Это и моя проблема. Я трачу несколько часов, пробуя каждое доступное предложение, но не могу заставить его работать. Кажется, что .ajax не может преобразовать свои данные в объект JSON, как этого ожидает Джерси. 08.09.2012

Ответы:


1

Параметр dataType относится к данным, ВОЗВРАЩАЕМЫМ с сервера, а не к отправляемым данным. Я думаю, вы предполагаете, что он отправляет необработанный json, хотя на самом деле он оценивает данные, которые вы передаете, и преобразует их в строку с помощью jQuery.param(). Эти данные будут доступны вам на $_REQUEST. См. документацию здесь.

Согласно документации, данные, которые вы отправляете, должны быть в виде строки ключ-значение в следующем формате:

key1=value1&key2=value2

или на карте в этом формате:

{key1: 'value1', key2: 'value2'}

Возможно, ваши лишние кавычки сбивают с толку карту? Лично я всегда использую строку ключ-значение, так как у нее меньше причуд.

24.05.2012
  • Спасибо! На самом деле я хочу, чтобы сервер возвращал JSON. Я следовал приведенному ниже руководству, где они также отправляют обычную строку json в качестве данных вместо строки ключ/значение или формата карты. oracle.com/technetwork/articles/java/jersey-jquery- 177519.html 24.05.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..