首页前端开发其他前端知识json字符串传到后台变成空

json字符串传到后台变成空

时间2023-10-28 11:24:03发布访客分类其他前端知识浏览527
导读:最近在开发项目中,遇到了一个神奇的问题:前端将一个json字符串传到后台,但是后台接收到的却是一个空对象。经过排查和调试,发现了问题所在。// 前端代码var data = {"name": "Emma", "age": 18};$.aja...

最近在开发项目中,遇到了一个神奇的问题:前端将一个json字符串传到后台,但是后台接收到的却是一个空对象。经过排查和调试,发现了问题所在。

// 前端代码var data = {
"name": "Emma", "age": 18}
    ;
$.ajax({
        url: "/api/user-info",    type: "POST",    data: JSON.stringify(data),    contentType: "application/json;
 charset=utf-8",    success: function() {
        // do something    }
}
    );
    // 后台Java代码@RequestMapping(value = "/api/user-info", method = RequestMethod.POST, produces = "application/json;
 charset=utf-8")@ResponseBodypublic Map getUserInfo(@RequestBody UserInfo userInfo) {
        // do something    return resultMap;
}
// UserInfo类public class UserInfo {
        private String name;
        private int age;
    //getters and setters}

在前端看来,这段代码是没有问题的,但是后台却接收到了一个空对象。经过分析,发现前端将data使用JSON.stringify()方法转成了json字符串,但是后台的@RequestBody注解将json字符串转成了UserInfo对象。问题在于UserInfo对象的属性与json字符串的键名一一对应,而在这个例子中,键名是带有双引号的字符串,而UserInfo的属性并没有双引号,导致了转换失败。

解决方法有两种:

1. 修改前端代码,将json对象直接传到后台:

var data = {
"name": "Emma", "age": 18}
    ;
$.ajax({
    url: "/api/user-info",    type: "POST",    data: data,    success: function() {
        // do something    }
}
    );
    

2. 修改后台代码,使用JsonNode解析json字符串:

@RequestMapping(value = "/api/user-info", method = RequestMethod.POST, produces = "application/json;
 charset=utf-8")@ResponseBodypublic Map getUserInfo(@RequestBody JsonNode jsonNode) {
        UserInfo userInfo = new UserInfo();
        userInfo.setName(jsonNode.get("name").asText());
        userInfo.setAge(jsonNode.get("age").asInt());
        // do something    return resultMap;
}
    

经过以上修改,问题得到了解决。当在后台接收json字符串时,一定要注意键名和属性名的对应关系。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: json字符串传到后台变成空
本文地址: https://pptw.com/jishu/514442.html
ajax发出json请求 ajax json php

游客 回复需填写必要信息