Spring post 不工作 - 我的 json 是从前端发送的,我可以在日志中看到它,但我的后端得到 Null

Posted

技术标签:

【中文标题】Spring post 不工作 - 我的 json 是从前端发送的,我可以在日志中看到它,但我的后端得到 Null【英文标题】:Spring post not working -- my json is sent from frontend i can see it in logs but my backend gets Null 【发布时间】:2020-04-06 00:32:17 【问题描述】:

所以基本上我检查了其他问题,大多数答案是在后端的 Post 方法中使用 @RequestBody,但它仍然抛出 500 错误,我收到的所有 json 数据都是 null

任何其他建议可能是什么问题?

这是我的休息:

@PostMapping( "/createScreen" )
    public ResponseEntity<String> createScreen(@RequestBody AdminWrapper adminWrapper) 
        System.out.println(adminWrapper);
        adminDao.saveAll(adminWrapper.getAdminList());

        return new ResponseEntity<String>(HttpStatus.OK);
    

这是我要发回的 json:


    "module": "testModule",
        "networkId": 1,
            "adminInfos":
    [
        "id": 1,
        "key": "Test",
        "value": "TestValue",
        "defValue": "TestDef",
        "type": "checkbox",
        "isActive": true
    ]

但在日志中我看到了这个:

adminWrapper [module=null, networkId = null, adminInfos = null ]

来自前端的请求:

function submit() 

let adminWrapper = 
        module: 'testModule',
        networkId: 1,
        adminInfos: []
    

$('#content  > .form-group').each(function () 

        let value = $(this).find('input').val();
        if ($(this).find('input').attr('type') === 'checkbox')

            value = $(this).find('input').prop('checked')

        let adminInfo = 

            id: $(this).find('input').attr('data-id'),
            key: $(this).find('input').attr('data-key'),
            value: value
        
        adminWrapper.adminInfos.push(adminInfo);
    )

$.ajax(
        type: "POST",
        url: 'http://localhost:8080/.../createScreen',
        contentType: "application/json",
        data: JSON.stringify(
            adminWrapper
        )
    )


【问题讨论】:

是的,我的内容类型正确,还有构造函数和 getter 设置器,检查我是否输入了错误但一切看起来都不错 我编辑了我的问题并添加了请求 JSON.stringify(adminWrapper) 正在将您的对象包裹在一个额外的层中,我认为,请尝试删除那些大括号。您也可以通过检查 chrome 中的网络选项卡来确认这一点。另一个可用于完整性检查的工具是 Postman,您可以在其中填写您希望发送的原始 JSON 删除了仍然相同的括号,在邮递员中我得到状态 200,所以我的请求有效,但值在某种程度上为空.. 在请求正文的浏览器中,我看到了我想要的,所以一切都可以从前端发送,但在后端,所有发送的值都是空的,就像我将空 json 发送到后端一样,如果我发送 with邮递员它工作我看到我的数据库中的值 【参考方案1】:

所以问题出在我的

        let adminInfo = 
            id: $(this).find('input').attr('data-id'),
            key: $(this).find('input').attr('data-key'),
            value: value
        

我忘了添加这些:

        "defValue": "TestDef",
        "type": "checkbox",
        "isActive": true

【讨论】:

【参考方案2】:

我认为您的 AdminWrapper.java 与来自前端的请求 josn 的结构不匹配,请尝试匹配请求 json 中的每个字段。

你可以参考下面的例子

https://www.baeldung.com/spring-request-response-body

【讨论】:

以上是关于Spring post 不工作 - 我的 json 是从前端发送的,我可以在日志中看到它,但我的后端得到 Null的主要内容,如果未能解决你的问题,请参考以下文章

不支持 Spring Rest POST Json RequestBody 内容类型

为什么$ .post()工作但不工作

角度 POST 请求不起作用但 GET 工作正常

在 Spring Boot 中通过 RestTemplate POST JSON 对象

Spring Security + REST 控制器 Post 方法不显示用户名

Spring 4.x/3.x (Web MVC) REST API 和 JSON2 Post 请求,如何一劳永逸?