AngularJS $ http POST получен как нулевая переменная в Java бэкэнде контроллера - PullRequest
0 голосов
/ 06 февраля 2020

Я собираюсь отправить данные из AngularJS, чтобы использовать их позже в бэкэнде Python + Java. Проблема в том, что он отправляется как нулевой, и я не могу понять, почему. В консоли google chrome нет ошибок, но я вижу проблему в консоли моего java сервера (mvn -P dev), где я использую return, чтобы узнать значение переменной при поступлении:

DEBUG 13496 --- [XNIO-23 task-27] a. c .psaop.logging.LoggingAspect: Выход: us.com.generi c .web.rest.DataController.getData () с результатом = переменная 'null' была сохранена

Контроллер Java, получающий информацию от AngularJS:

@RestController
@RequestMapping("/api")
public class DataController {

    @RequestMapping("/data/")
    @ResponseStatus(code = HttpStatus.OK)
    public @ResponseBody String getData( @RequestParam(name="dataVariable", required=false) String dataVariable) {      

        return "The variable '" + dataVariable + "' was saved";
    }
}

Angular JS Контроллер:

angular
    .module('Generic')
    .controller('DataController', DataController);

    DataController.$inject = ['$scope', '$http', 'URI', '$timeout'];

    function DataController ($scope, $http, URI, $timeout) {

        var myInformation = 'HeadStreet';       

        $http.post(URI + 'api/data/', {
            dataVariable: myInformation
        }, {
                withCredentials: true,
                headers: {
                    'Content-Type': 'charset=utf-8'
                }
            }).then(Success, Error);
        }

        function Success() {
           alert('Variable sent');
        }

        function Error() {
           alert('Issue while sending data');
        }
  }

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы публикуете свои переменные данных как json в теле запроса. @RequestParam читает из параметров запроса.

если вы хотите разместить данные в теле, вы должны использовать @ RequestBody

Вам нужно создать класс POJO, как показано ниже

public class GetDataRequest{
   public String dataVariable;
}

Затем в вашем контроллере

@RequestMapping("/data/")
@ResponseStatus(code = HttpStatus.OK)
public @ResponseBody String getData( @RequestBody GetDataRequest request) {      

    return "The variable '" + request.dataVariable + "' was saved";
}

Это должно работать

0 голосов
/ 06 февраля 2020

Вы используете RequestParam в своем контроллере, но отправляете данные в теле запроса POST.

RequestParam используется для параметра в вашем URL, например, /api/data?dataVariable=HeadStreet, но вам нужно прочитать тело сообщения с помощью @RequestBody, например

@RestController
@RequestMapping("/api")
public class DataController {

    @RequestMapping("/data/")
    @ResponseStatus(code = HttpStatus.OK)
    public @ResponseBody String getData(@RequestBody YourDTO yourDTO) String dataVariable) {      

        return "The variable '" + yourDTO.dataVariable + "' was saved";
    }
}

и соответствующего класса объектов передачи данных

class YourDTO {
    public String dataVariable;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...