将 JSON 从 AngularJS 传递到 Springboot RestController 不起作用

Posted

技术标签:

【中文标题】将 JSON 从 AngularJS 传递到 Springboot RestController 不起作用【英文标题】:Passing JSON from AngularJS to Springboot RestController is not working 【发布时间】:2021-12-28 20:13:05 【问题描述】:

我的一个项目遇到了问题。这是场景。

我有 Angular 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 (restcontroller)

@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 WARN 24572 --- [nio-8080-exec-2] .wsmsDefaultHandlerExceptionResolver:已解决由处理程序执行引起的异常:org.springframework.web.bind.MissingServletRequestParameterException:必需的 TradeAnnotationRequest 参数“请求” ' 不存在 2021-11-17 13:29:14.447 WARN 24572 --- [nio-8080-exec-5] .wsmsDefaultHandlerExceptionResolver:已解决由处理程序执行引起的异常:org.springframework.web.bind.MissingServletRequestParameterException:必需的 TradeAnnotationRequest 参数“请求” ' 不存在

使用@RequestBody,我得到空值。 由于某种原因,未传递 JSON 数据。有人可以帮忙吗? 我浏览了很多帖子。

【问题讨论】:

【参考方案1】:

我有一些进展。但是,我的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);
        

在我的restController中

  @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 中添加了以下依赖项

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>

        </dependency>

但是我仍然是空的。有知道的朋友帮忙看看

【讨论】:

【参考方案2】:

尝试将您的 postExample(json 正文)编辑为:


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

注意引号。

【讨论】:

谢谢谢伊。在以下添加的引号中 ``` "acctNo": $scope.tradeAnnotationDto.acctNo, "tradeComment": $scope.tradeAnnotationDto.tradeComment ; ``` 我的 RestController 有 ``` @RequestMapping(value = "/postExample", method = RequestMethod.POST, consumes = "application/json", headers = "content-type=application/json") public void postExample( @RequestBody TradeAnnotationRequest request) ``` 当我检查 service.js 中的值时,值仍然为 null,因为 TradeAnnotationRequest(acctNo=null, tradeComment=null) 就在那里。

以上是关于将 JSON 从 AngularJS 传递到 Springboot RestController 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将信息从 Angular 组件传递到 AngularJS 组件?

AngularJS:如何将值从控制器传递到服务方法?

如何将变量从 jQuery 传递到 AngularJs 函数

将 AngularJS 范围变量从指令传递到控制器的最简单方法?

如何使用angularjs将日期格式从控制器传递到指令

将带有HTML标签的输出从AngularJs传递到HTML [重复]