关于JSON的常见问题以及首字母大写的JSON

2020新笔记:

 

前端封装JSON,有id,和一个list集合。首字母大写的情况

var cd = [];
                                    for (var i = 0; i < selectArr.length; i++) {
                                        var cd1 = {};
                                        cd1["Isfz"] = false
                                        cd1["Fseq"] = parseInt(data[0].fseq) + parseInt(i*1);
                                        cd1["FOperNumber"] = parseInt(data[0].fopernumber) + parseInt(i*10);
                                        cd1["FProcessId"] = selectArr[i].fid;
                                        cd[i] = cd1;
                                    }

                                    var cdajax = {
                                        "Id":document.getElementById("fid").value,
                                        "Hlist":cd,
                                    }

$.ajax({
                                        url: '${path }/workJH/orderGongYiName',
                                        type: 'post',
                                        contentType : 'application/json;charset=UTF-8',
                                        data: JSON.stringify(cdajax),
                                        success: function (res) {}
                                    });

或者这样封装也行 

var objList = {};
	objList.flowid = '123456';
	objList.id = 'abcdefg';
	objList.roleid = '654321';
	
	var jsonbeans = [];
	var input = $(".budget_tableone").find("input");
	    input.each(function () {
	    	jsonbeans.push({"name":$(this).attr("name"),"value":$(this).val().replace(/,/g,'β')});
	    });
	objList.jsonbeans = jsonbeans;

然后控制器

@RequestMapping(value = "/orderGongYiName", method = RequestMethod.POST)
    @ResponseBody
    public Object copyOrderGongYiName(@RequestBody(required = false) FM_FZ  fz) {
    。。。。。
}

问题来了,因为JSON首字母大写,导致映射不到实体类

于是就加了JsonProperty,即可。这里实体类千万不要大写,下面代码里是错误示范

@JsonIgnoreProperties(ignoreUnknown = true)
public class FM_FZ implements Serializable {


    private static final long serialVersionUID = -7091879592386660617L;

    /*
     * 登录的TOKEN
     */
    @JsonProperty(name ="Token")
    private String Token;

    /*
     * 工序计划单ID
     */
    @JsonProperty("Id")
    private long Id;


    /*
     * 子单据体集合
     */
    @JsonProperty(name ="Hlist")
    private List Hlist;
}

结论:@JsonProperty是JSON转Java对象时候属性的名称,即Java当前变量的别名,系统会取json中对应key值放到该属性;@JSONField是对象转json时,产生的json对象的key值。所以遇到首字母大写的情况最好两个注解都加上

 

2019年旧笔记:

如果加了contentType :application/json,后台要有实体类接参。要带上@Requestbody

用String 也是可以接受的 。JSON要首字母小写

var checkStatus = table.checkStatus('listTableId'),
            data = checkStatus.data;
            let dataAry = checkStatus.data.map(e=>{return {'fid':e.fid,'fdetailid':e.fdetailid} });
 let requestData = {
                        swtichID:a,
                        id:dataAry
                    }
                $.ajax({
                    url:  '${path }/workJH/updateJHStatus',
                    type: 'POST',
                    dataType:"json",//必须
                    contentType : 'application/json;charset=UTF-8',
                    data:JSON.stringify(requestData),
                    success: function (res) {
                        layer.msg(res)

如果是(int id,int age)前台不要加application/json

不懂可以参考  参考资料

 


 

关于 JAVA 框架-SSM-JSON 的提问

@Responsebody已经注解了,代表把对象自动转化成json格式。所以就没必要再手动转化成json了,控制器的返回值写Category,返回值也直接返回对象 同理,@Requestbody是将json格式的字符串,自动转化成pojo对应的对象

 

后台接收JSON,一直报415错误

因为web.xml没配置utf-8


        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        CharacterEncodingFilter
        /*
    

 

如果不配置这个的话,就直接配置


    
      com.fasterxml.jackson.core
      jackson-annotations
      2.9.5
    
    
      com.fasterxml.jackson.core
      jackson-core
      2.9.5
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.9.5
    



        
            
            
                
                    
                        text/html;charset=UTF-8
                        application/json;charset=UTF-8
                    
                
            
            
            
                
                    
                        text/html;charset=UTF-8
                        application/json;charset=UTF-8
                    
                
            
        
    

 

dataType值如果为'json',jquery就会把后端返回的字符串尝试通过JSON.parse()尝试解析为js对象。

dataType值如果为'text',结果弹出框直接显示后台返回的json字符串。

dataType值如果为'html',结果弹出框直接显示后台返回的json字符串。
 

你可能感兴趣的:(JAVA)