Контроллер Spring возвращает 415 запросов из приложения AngularJS - PullRequest
0 голосов
/ 03 апреля 2020

Я застрял на некоторое время с чем-то, что кажется очень тривиальным, но я просто не могу заставить его работать. У меня есть контроллер AngularJS, который вызывает backen-приложение Spring для загрузки через rest. Я могу подтвердить, что если я делаю запрос к бэкэнду через Почтальон, он работает хорошо, просто когда он выполняется через страницу html, он просто не работает, я получаю 415.

var survey = angular.module('survey', []);

var surveyDto = {
  age:"",
  sex:"",
  status:"",
  chronic:"",
  keyWorker:""
};

survey.controller('surveyController', function($scope, $http) {

    $scope.sendAnswers = function(surveyDto) {

        $http(
                {
                    method: 'POST',
                    url: 'http://localhost:8080/surveys/new',
                    data: angular.toJson(surveyDto),
                    headers: {'Content-Type': 'application/json'}
                }
        );
    };
});

В серверной части у меня очень простой Java контроллер:

@RequestMapping(value = "/surveys/new", consumes = "application/json", produces = "application/json", method = RequestMethod.POST)
    public ResponseEntity<NewSurveyResponse> newSurvey(HttpServletRequest request) {

//...
    }

Когда веб-страница использует контроллер для отправки запроса, я получаю 415 (Неподдерживаемый тип носителя).

enter image description here

Я не понимаю, почему. Раньше я пытался использовать свой собственный объект dto в контроллере для представления данных, но также не работал. Я не уверен, чего не хватает. Я где-то читал, что я могу использовать HttpServletRequest, но также не работает. Любая идея?

Я использую следующие версии Spring и AngularJS - GoogleApis Angular 1.7.9 - Spring boot 2.2.4

Обновление Во время отладки Я могу заметить, что используемый тип носителя правильный. См. Изображение: enter image description here

обновление 2 При попытке кода, предложенного Марко Белером, я получаю следующую ошибку: enter image description here

обновление 3 Я попытался добавить импорт для ошибки, описанной выше, но я получаю это enter image description here

1 Ответ

0 голосов
/ 03 апреля 2020

В сообщении об ошибке говорится, что ваш тип контента пуст, что заставляет меня поверить, что вы неправильно указали его при вызове Angular.

Попробуйте это - или его вариант.

import { HttpHeaders } from '@angular/common/http';

let headers = new HttpHeaders({
    'Content-Type': 'application/json'});
let options = { headers: headers };
$http.post("http://localhost:8080/surveys/new", surveyDto, options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...