Передача JSON из AngularJS в Springboot RestController не работает

#json #angularjs #spring-restcontroller

Вопрос:

У меня возникла проблема с одним из проектов, над которым я работаю. Вот такой сценарий.

У меня есть угловой проект Springboot, где с HTML-страницы данные должны быть отправлены в контроллер Springboot (RestController) и выполняется обработка. Когда я отправляю одну строку в качестве входных данных в конечную точку, это работает, но когда мне нужно отправить JSON, это не работает.

Вот пример кода.

AnnotationController.js

 $scope.postExample = function() {  var annotationjson = {  acctNo: $scope.tradeAnnotationDto.acctNo,  tradeComment: $scope.tradeAnnotationDto.tradeComment  };  AnnotationService.postExample(annotationjson).then(function() {  }, function(reason) {  console.log("error occured");  }, function(value) {  console.log("no callback");  }); }  

AnnotationService.js

 service.postExample = function(annotationjson) {  alert("Post Example Click Value is "   annotationjson.acctNo   " "   annotationjson.tradeComment); -- I see the data here.  return $http.post(“/annotatetrade/postExample“, annotationjson); }  

AnnotationController.java (рестконтроллер)

 @RequestMapping(value= "annotatetrade/postExample", method= RequestMethod.POST,consumes = "application/json") public void postExample(@RequestParam TradeAnnotationRequest request){  System.out.println("Post Example account "   request.getAcctNo());  System.out.println("Post Example comment "   request.getTradeComment()); }  

TradeAnnotationRequest.java

 @Data @NoArgsConstructor @AllArgsConstructor @ApiModel(value="TradeAnnotationRequest") public class TradeAnnotationRequest {  String acctNo ;  String tradeComment ; }  

С помощью @RequestParam я получаю вот что. 2021-11-17 13:28:55.996 ПРЕДУПРЕДИТЬ 24572 — [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Устранено исключение, вызванное выполнением обработчика: org.springframework.web.bind.Исключение MissingServletRequestParameterException: Требуемый параметр TradeAnnotationRequest «запрос» отсутствует 2021-11-17 13:29:14.447 ПРЕДУПРЕДИТЬ 24572 — [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Устранено исключение, вызванное выполнением обработчика: org.springframework.web.bind.Исключение MissingServletRequestParameterException: Требуемый параметр TradeAnnotationRequest «запрос» отсутствует

С помощью @RequestBody я получаю нули. По какой-то причине данные JSON не передаются. Кто-нибудь может, пожалуйста, помочь? Я просмотрел множество постов.

Ответ №1:

Попробуйте отредактировать свой постпример (тело json) следующим образом:

 {  "acctNo": $scope.tradeAnnotationDto.acctNo,  "tradeComment": $scope.tradeAnnotationDto.tradeComment }  

Обратите внимание на кавычки.

Комментарии:

1. Спасибо, Шей. В добавленных кавычках, как показано ниже ` «{«acctNo»: $scope.tradeAnnotationDto.acctNo,» tradeComment`: $scope.tradeAnnotationDto.tradeComment}; «»и у моего контроллера RestController есть `» @Сопоставление запросов(значение = «/postExample», метод = Метод запроса. СООБЩЕНИЕ, потребляет = «приложение/json», заголовки = «тип содержимого=приложение/json») публичный пустой постпример(@RequestBody запрос TradeAnnotationRequest) {`По-прежнему значения равны нулю как запрос TradeAnnotationRequest(acctNo=null, tradeComment=null) Когда я проверил значения в service.js, оно есть.

Ответ №2:

У меня есть некоторый прогресс. Однако я все еще получаю данные null в своем restcontroller. Вносятся следующие изменения

 service.postExample = function(medicoRicercato) {  alert("Post Example Click Value is "   medicoRicercato.acctNo   " "   medicoRicercato.tradeComment);  return $http({  url: CONSTANTS.postExample,  contentType: "application/json;charset=UTF-8",  method: "POST",  data: {medicoRicercato},  dataType: 'json'  });   //return $http.post(CONSTANTS.postExample, medicoRicercato);  }  

и в моем рестконтроллере

 @RequestMapping(value = "/postExample", method = RequestMethod.POST, consumes = "application/json",  headers = "content-type=application/json")  public void postExample(@RequestBody TradeAnnotationRequest request){   System.out.println("Before Request");  System.out.println(request);  System.out.println("Post Example ac "   request.getAcctNo());  System.out.println("Post Example co "   request.getTradeComment());  }  

добавлена следующая зависимость в моем pom.xml

 lt;dependencygt;  lt;groupIdgt;com.fasterxml.jackson.corelt;/groupIdgt;  lt;artifactIdgt;jackson-databindlt;/artifactIdgt;   lt;/dependencygt;  

Однако я все еще получаю ноль. Может ли кто-нибудь, кто знает, пожалуйста, помочь