Не могу получить информацию об ошибке валидации в AngularJS - PullRequest
0 голосов
/ 07 мая 2020

У меня есть форма html с некоторыми полями, которые мне нужно проверить (имя, адрес, адрес электронной почты и т. Д. c). И это работает, но я не могу передать информацию об ошибке проверки из метода @PostMapping в AngularJS. Ответ пуст. Что я делаю не так?

Store. java - класс контроллера

    @Controller
    public class Store {

        @PostMapping("/save")
        public ResponseEntity<Object> getShippingInfo(@Valid @RequestBody final User user,
                final BindingResult bindingResult) {

            Store.LOGGER.info("{}", user);

            if (bindingResult.hasErrors()) {
                Store.LOGGER.info("{}", "Validation failed");
                final List<String> errors = bindingResult.getAllErrors().stream()
                        .map(DefaultMessageSourceResolvable::getDefaultMessage)
                        .collect(Collectors.toList());

                return new ResponseEntity<>(errors, HttpStatus.OK);
            } else {
                Store.LOGGER.info("{}", "Validation successed");
            }
            return new ResponseEntity<>(HttpStatus.CREATED);
        }
    }

Main. js - файл с AngularJS

  var app = angular.module('myShoppingList', ['ngRoute', 'ngStorage']);
  //some code
  app.controller('myCtrl', function ($scope, $http, $location, items) {
    $scope.listCustomers;

    $scope.postFunc = function () {

      if ($scope.formCust) {
        $scope.listCustomers = this.formCust;
        $scope.formCust = {};
      }

      var urlInfo = '/save';
      var config = {
        headers: {
          'Content-Type': 'application/json',
          'Accept': 'text/plain'
        }
      };

      var dataArr = $scope.listCustomers;

      $http.post(urlInfo, dataArr, config).then(function (response) {
        $scope.postDivAvailable = true;
        $scope.postCust = response.data;
      }, function error(response) {
        $scope.postResultMessage = 'Error Status: ' + response.statusText;
        console.log('', $scope.postResultMessage);
      });

      $scope.listCustomers = [];
      $scope.result = 'Success!';
    };
  });

Итак, здесь мой вывод в консоли браузера из $scope.postResultMessage просто пуст, а из Store.LOGGER.info("{}", errors); я попадаю в консоль Eclipse, как и ожидалось:

[size must be between 7 and 10, invalid credit card number]

Обновление 1

Если я пытаюсь вывести только ответ на консоль браузера, я получаю следующее: enter image description here

1 Ответ

1 голос
/ 07 мая 2020

Проблема может заключаться в том, что вы возвращаете свои ошибки с кодом состояния HTTP 200. Это означает, что блок ошибок внешнего интерфейса не выполняется (интерфейс предполагает, что все в порядке). Вы должны установить код состояния HTTP, например, Bad Request.

...