Почтовый запрос Java Spring boot

Я пытаюсь сделать простой почтовый запрос от React (на стороне клиента) на стороне сервера Java. Вот мой контроллер внизу.

package com.va.med.dashboard.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import com.va.med.dashboard.services.VistaServiceImpl;
import gov.va.med.exception.FoundationsException;

@RestController
@RequestMapping("/dashboard")
public class DashboardController  {

   @Autowired
   private VistaServiceImpl vistaService;

   @RequestMapping("/main")
   String home() {
          return "main route";
   }

   @RequestMapping("/rpc")
   String test() throws FoundationsException {
          vistaService.myAuth();
          return "this is rpc route";
   }

   @RequestMapping(method = RequestMethod.POST, produces = 
"application/json", value = "/vista")
   @ResponseStatus(value = HttpStatus.ACCEPTED)
   public String getVistaConnection(@RequestBody String ipString, @RequestBody String portString, @RequestBody String accessPin,
   @RequestBody String verifyPin) {

       System.out.println(ipString);
       System.out.println(portString);
       System.out.println(accessPin);
       System.out.println(verifyPin);

       vistaService.connect(ipString, portString, accessPin, verifyPin); // TO-DO populate with serialized vars
       if (vistaService.connected) {
              return "Connected";
       } else {
              return "Not Connected";
       }
   }
}

Ниже мой ответ на запрос сообщения Axios

 axios.post('/dashboard/vista', {
  ipString: this.state.ipString,
  portString: this.state.portString,
  accessPin: this.state.accessPin,
  verifyPin: this.state.verifyPin
})
.then(function (response){
  console.info(response);
})
.catch(function (error){
  console.info(error);
});    

Это тоже ошибка, которую я получаю.

Failed to read HTTP message:     
org.springframework.http.converter.HttpMessageNotReadableException: 
Required request body is missing:

Кто-нибудь может пролить свет на это сообщение об ошибке? Я исхожу из чистого фона JavaScript, поэтому многого я просто не знаю о Java, потому что это автоматически реализуется внутри языка JavaScrips.

Еще раз спасибо заранее!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 483
2

Ответы 2

Ты делаешь это неправильно.

Вместо

public String getVistaConnection(@RequestBody String ipString, @RequestBody String portString, @RequestBody String accessPin,RequestBody String verifyPin)

Вы должны заключить эти параметры в класс:

public class YourRequestClass {
   private String ipString;
   private String portString;
   ....
   // Getter/setters here
}

и ваш метод контроллера будет выглядеть так:

public String getVistaConnection(@RequestBody YourRequestClass request)

От @Rajmani Arya:

Поскольку RestContoller и @RequestBody предполагают чтение тела JSON, поэтому в вашем вызове axios.post вы должны поместить заголовки Content-Type: application/json

Поскольку RestContoller и @RequestBody предполагают чтение тела JSON, поэтому в вашем вызове axios вы должны поместить заголовки Content-Type: application/json

Rajmani Arya 10.05.2018 20:29

Хороший улов! Я добавлю это

Mạnh Quyết Nguyễn 10.05.2018 20:30

Попробуйте заменить все аннотации @RequestBody на @RequestParam

public String getVistaConnection(@RequestParam String ipString, @RequestParam String portString, @RequestParam String accessPin, @RequestParam String verifyPin)

Когда я пытаюсь это сделать, он говорит: «Требуемый строковый параметр ipString отсутствует». Я считаю, что у меня есть правильное написание каждой вещи, которую я просматривал несколько раз.

Jeffrey Yourman 11.05.2018 17:09

Другие вопросы по теме