反序列化 JSON 空值 Jakson java

Deserializing JSON empty value Jakson java

我正在使用 Spring 4 MVC、JQDataTable 和 Jaskon 库将 JSON 对象从 JSP 发送到 spring 控制器。

在 table 中,当我单击保存按钮时,我触发了 ajax 调用。这里有两个senario.

  1. 我的行可能是旧的:在这种情况下,我有部门 ID,hibrnate saveoruupate 命令将更新行。
  2. 我的行可能是新的:在这种情况下,我没有部门 ID,hibernate saveorupdate 命令将保存新行。 Note:One 两种操作的控制器。

当我点击更新按钮时, 如果行是旧的 json 对象是 "{\"departmentId\":2,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}", JSON 对象反序列化成功并且更新命令成功触发 如果行是新的 json 对象是 {\"departmentId\":,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}", 在这种情况下,我的部门 ID 为空,因此 JSON 对象不会得到解析并给出错误。

我知道我必须在 javascript 中处理它以排除部门 ID 标签(如果它是新行)。 应用程序中会有很多大师,所以每次我都必须在 javascript 中处理。 Java脚本增加代码。 有没有办法在相应的 Java 模型中处理。我已将初始化值设为零,但我仍然给出解析错误。 另外:我必须在 Java 模型中添加新命令 属性。如果行是新的或部门 ID 为 0,则自动将命令 属性 设置为 "ADD",如果行是旧的,部门 ID 不为零,则将命令 属性 设置为 "UPADATE"。

 updateRow: function (rowID, rowData, commit) {
                var jsonToBeSend="{\"departmentId\":"+rowData.departmentId+",\"departmentName\":\""+rowData.departmentName+"\",\"createdBy\":1,\"modifiedBy\":1,\"status\":"+rowData.status+"}";

                alert(dept)
                $.ajax({ 
                    url: "/BusinessReimbursment/addDepartment", 
                    type: 'POST', 
                    dataType: 'json', 
                    data: jsonToBeSend,
                    contentType: 'application/json',
                    mimeType: 'application/json',
                    success: function(data) { 
                        alert(data.success + " " + data.message);
                        commit(true);
                    },
                    error:function(data) { 
                       // alert("error: "+data);
                       // $("#dataTable").jqxDataTable('deleteRow', rowID);
                    }
                });

public class DepartmentDTO implements Serializable{
private static final long serialVersionUID = 1L;

Integer departmentId=0;

@NotNull
@Size(min=3,max=30,message="Department lenght should be between 3 to 30 character")
String departmentName;

Integer createdBy;

Integer modifiedBy;
@NotNull
Boolean status;
}

@控制器

 @RequestMapping(value="/addDepartment", method=RequestMethod.POST)
    public @ResponseBody AjaxResponse addDepartment(@RequestBody final DepartmentDTO departmentDTO){
        AjaxResponse response=new AjaxResponse();
        Department department=DepartmentConvertor.setDepartmentDTOToDepartment(departmentDTO);
        if(Validation.validateForNullObject(department)){
            departmentService.addDepartment(department);
        }
        response.setSuccess(Boolean.TRUE);
        response.setMessage("Record save Successfully");
        return response;
    }

又问了一个愚蠢的问题。在模型中我应该使用原始变量还是包装器 类 变量?休眠模型中的相同问题。

如果您了解 JQ Widget 那么:我可以将数据行转换为 JSON。

{\"departmentId\":,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}", in this case my department id is empty and so JSON object dont get parse and give error.

因为 departmentId 没有值,在这种情况下设置 null'' 空值以成功解析 JSON。

updateRow: function (rowID, rowData, commit) {
                var jsonToBeSend = new Object();
                if (rowData.departmentId != "" || rowData.departmentId != null){
                 jsonToBeSend["departmentId"] = rowData.departmentId;
                }
                jsonToBeSend["departmentName"] = rowData.departmentName;
                jsonToBeSend["createdBy"] = 1;
                jsonToBeSend["modifiedBy"] = 1;
                jsonToBeSend["status"] = rowData.status;
                $.ajax({ 
                    url: "/BusinessReimbursment/addDepartment", 
                    type: 'POST', 
                    data: JSON.stringify(jsonToBeSend),
                    beforeSend: function(xhr) {                 
                        xhr.setRequestHeader("Accept", "application/json");
                        xhr.setRequestHeader("Content-Type", "application/json");
                    }
                    success: function(data) { 
                        alert(data.success + " " + data.message);
                        commit(true);
                    },
                    error:function(data) { 
                       // alert("error: "+data);
                       // $("#dataTable").jqxDataTable('deleteRow', rowID);
                    }
                });

in model should i use primitive variable or wrapper classes variable?? Same question in hibernate model.

首选 Wrapper classes,在原始变量中你不能存储空值。还要更改 DTO class

中的以下语句

来自:

Integer departmentId=0;

至:

Integer departmentId;

未保存的新部门模型 classes 应具有 null ID。