Сбой вызова сервиса Micronaut с использованием AJAX - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть служба Micronaut, которая вызывается из клиента с помощью вызова AJAX, реализованного в JQuery.Служба Micronaut показана ниже:

 @Controller("/ajaxcaller")
 public class AjaxService
{
   @Get("/printit")
   @Produces(MediaType.TEXT_PLAIN)
   public String updateData(Session theSess)
   {
      System.out.println("Accessing from AJAX.");

      return("Successful!");
   }
}

Ниже приведен Javascript, который вызывает службу micronaut:

  $.ajax({
      url : '/ajaxcaller/printit',
      type: "GET",
      contentType: 'application/text',
      success: function(data, textStatus, jqXHR)
      {
         alert("Get successful! "+data);
      },
      error: function (jqXHR, textStatus, errorThrown)
      {
         alert("Get failed! Error: "+jqXHR.status+", "+errorThrown);
      }
  });

К сожалению, несмотря на то, что я говорю серверу и клиенту:для обработки простого текста вызов AJAX завершается неудачно со следующим сообщением:

 Get failed! Error: 415, Unsupported Media Type

Нашел ли я ошибку в обработчиках контроллера Micronaut, или я что-то упустил в коде моего клиента или сервера?Есть ли способ заставить этот вызов AJAX работать?

ОБНОВЛЕНИЕ: следуя совету, приведенному Джеймсом в ответе 1 ниже, в код были внесены следующие изменения, как показано ниже:

 @Controller("/ajaxcaller")
 public class AjaxService
 {
   @Get("/printit")
   @Consumes("application/text")
   public String updateData(Session theSess)
   {
      System.out.println("Accessing from AJAX.");

      return("Successful!");
   }
}

Я все еще получаю сообщение об ошибке 415., когда пытаюсь использовать службу.

Поскольку раньше я создавал и успешно использовал другие службы Get в Micronaut, я выполнил тестирование этой службы с использованием другой страницы.По сути, вместо вызова ajax для вызова службы я использовал следующую строку в файле HTML:

window.location.href = '/ajaxcaller/printit';

При вызове этой функции создается новая страница, отображающая строку, возвращаемую службой (что было, конечно, ожидаемым поведением).Ошибки 415 не генерируются - даже если я удаляю аннотацию @Consumes.

Очевидно, что служба Micronaut обрабатывает вызов AJAX не так, как обычный вызов страницы.Есть ли на стороне AJAX параметр, который мне не хватает, или в Micronaut есть ошибка, препятствующая успешным вызовам AJAX?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Оказывается, что комментарий Рохита Миттала определил проблему.Удалив параметр contentType из вызова AJAX, я смог устранить ошибки 415.

Я провел дальнейшие эксперименты и обнаружил, что при вызовах AJAX тип содержимого должен быть точно указан как на клиенте, так и на клиенте.сервер.Однако, если вы просто выполняете GET, используя AJAX, ничего не передавая службе, не устанавливайте тип содержимого, поскольку это приведет к ошибкам 415, независимо от того, добавите ли вы аннотацию @Consumes в службу или нет.

Если вы не используете AJAX, эти соображения, очевидно, становятся неактуальными.Службы Micronaut работают в этих условиях при сбое вызовов AJAX.

0 голосов
/ 23 февраля 2019

Как показывает ошибка, вы отправляете неподдерживаемый тип носителя.

@Produces(MediaType.TEXT_PLAIN) сообщает Micronaut, какой тип содержимого будет создан.Вы не указали ничего о типе контента, который может быть потреблен , поэтому по умолчанию он равен application/json.

Добавление @Consumes("application/text") сообщит Micronaut тип контента, который вы собираетесь использовать.Потребление, основанное на предоставленном вами вызове ajax.

...