Обязательный строковый параметр name отсутствует - PullRequest
1 голос
/ 11 июля 2019

Я получаю ошибку, названную в заголовке.

Не уверен, что происходит

In React Native:

var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
      xmlhttp.open("POST", "http://[my ip address]:8000/add");
      xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
      xmlhttp.send(JSON.stringify({name: this.state.name}));

Весной Boot:

@RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String getFoos(@RequestParam String name) {
        System.out.println("Received POST request:" + name);
        return null;
    }

Ответы [ 3 ]

0 голосов
/ 11 июля 2019

Клиент передает «имя» в теле запроса, но сервер ожидает «имя» в качестве параметра запроса.

Чтобы передать имя в качестве параметра запроса, вы можете попробовать это:

var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
      xmlhttp.open("POST", "http://[my ip address]:8000/add?name="+ this.state.name);
      xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
      xmlhttp.send();
0 голосов
/ 11 июля 2019

Внешний интерфейс

Здесь вы делаете запрос в виде переменной Path, которая добавляется к URL.

http://[my ip address]:8000/add/stateName.

var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
      xmlhttp.open("POST", "http://[my ip address]:8000/add?name="+ this.state.name);
      xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
      xmlhttp.send();

Backend

@RequestMapping(value = "/add/{name}", method = RequestMethod.POST)
    @ResponseBody
    public String getFoos(@PathVariable(name="name") String name) {
        System.out.println("Received POST request:" + name);
        return name;
    }

Примечание: нет необходимости использовать @ResponseBody, если вы используете @RestController

Если вы хотите отправить несколько данных, как показано ниже, то идеальным способом является создание одного DAO / DTO на стороне сервера

 const booking = { 
   name: this.state.name, 
   location: this.state.location, 
   pax: this.state.pax, 
};

Backend

public class StateDto{
    private String name;
    private String location;
    private String pax;
    //Getter-Setters, AllArgConstructor-SuperConstructor
}

Тогда ваш контроллер будет следующим:

@RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String getFoos(@RequestBody StateDto stateDto) {
        System.out.println("Received POST request:" + stateDto.getName());
        return stateDto.getName();
    }
0 голосов
/ 11 июля 2019

Если вы не хотите изменять свой код внешнего интерфейса, вы можете изменить код внутреннего кода с @RequestParam на @RequestBody, поскольку вы не добавляете параметры, а тело в интерфейсе.

...