#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;
Однако я все еще получаю ноль. Может ли кто-нибудь, кто знает, пожалуйста, помочь