簡體   English   中英

數據表編輯器 json 的 Java 結構

[英]Java structure for Datatables editor json

對於數據表編輯器傳遞給我的一些 JSON 數據,我需要一個 Java 數據結構。 接收到的數據格式是這樣的:

{
    "action":"edit",
    "data": {
        "1009558":{
            "weekNumber":"2"
            ... (more properties)
         }
     }
}

這是完整的文檔: https : //editor.datatables.net/manual/server

編輯:文檔顯示作為表單參數發送的數據。 我正在對數據進行字符串化並將其作為 JSON 發送。 上面有一個例子。

“1009558”是行 ID。 如果編輯器發送了多行,就會有多個數組條目(每個條目都有一個 ID)。

任何人都可以就如何制作用於反序列化的 Java 數據結構(通過 Spring MVC)提供一些建議嗎? 我可以很容易地映射“動作”,但我被困在“數據”元素上。

我是 Joe Littlejohn 的JSON 工具的超級粉絲。 為它提供一個示例 JSON 文件,它可以為您生成 POJO。

這是它生成的示例,基於您發布的站點中的 JSON 片段。

JSON:

{
"data": [
    {
        "DT_RowId":   "row_29",
        "first_name": "Fiona",
        "last_name":  "Green",
        "position":   "Chief Operating Officer (COO)",
        "office":     "San Francisco",
        "extn":       "2947",
        "salary":     "850000",
        "start_date": "2010-03-11"
    }
]

}

爪哇:

@Generated("org.jsonschema2pojo")
public class Datum {

    public String dTRowId;
    public String firstName;
    public String lastName;
    public String position;
    public String office;
    public String extn;
    public String salary;
    public String startDate;
}

@Generated("org.jsonschema2pojo")
public class Example {
    public List<Datum> data = new ArrayList<Datum>();
}

更新:

看起來是表單提交實際發送的內容:

action:edit
data[row_1][first_name]:Tiger23
data[row_1][last_name]:Nixon
data[row_1][position]:System Architect
data[row_1][office]:Edinburgh
data[row_1][extn]:5421
data[row_1][start_date]:2011-04-25
data[row_1][salary]:320800

我不認為這是 Json,我不知道我是否會嘗試這樣對待它。 如果您需要使用 Java 提交表單數據,最好使用Apache HttpComponents 您可以將上面的 Java“數據”對象重用為域對象,然后使用以下格式的字符串填充 POST 內容:

data[ \DT_RowId\ ][\PropertyName\]: \PropertyValue\

我寧願建議你使用jackson

這是您要求的示例:

package com.github.xsavikx.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.HashMap;
import java.util.Map;

public class JacksonTest {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, DatabaseRow> data = new HashMap<>();
        DatabaseRow row = new DatabaseRow(2, "someData");
        data.put("1009558", row);
        String action = "action";
        DatabaseEntry dbEntry = new DatabaseEntry();
        dbEntry.setAction(action);
        dbEntry.setData(data);
        System.out.println(objectMapper.writeValueAsString(dbEntry));
    }
}

結果:

{"action":"action","data":{"1009558":{"weekNumber":2,"someData":"someData"}}}

楷模:

package com.github.xsavikx.jackson;

import java.util.Map;

public class DatabaseEntry {
    private String action;
    private Map<String, DatabaseRow> data;

    public DatabaseEntry() {

    }

    public DatabaseEntry(String action, Map<String, DatabaseRow> data) {
        this.action = action;
        this.data = data;
    }

    public Map<String, DatabaseRow> getData() {

        return data;
    }

    public void setData(Map<String, DatabaseRow> data) {
        this.data = data;
    }

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }
}

package com.github.xsavikx.jackson;

public class DatabaseRow {
    private int weekNumber;
    private String someData;
    public DatabaseRow(){
    }
    public DatabaseRow(int weekNumber, String someData) {
        this.weekNumber = weekNumber;
        this.someData = someData;
    }

    public int getWeekNumber() {
        return weekNumber;
    }

    public void setWeekNumber(int weekNumber) {
        this.weekNumber = weekNumber;
    }

    public String getSomeData() {
        return someData;
    }

    public void setSomeData(String someData) {
        this.someData = someData;
    }
}

更新:更通用的地圖地圖解決方案:

package com.github.xsavikx.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class JacksonTest {
    public static void main(String[] args) throws IOException {
        serializeTest();
        deserializeTest();
    }
    private static void deserializeTest() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        DatabaseEntry databaseEntry = objectMapper.readValue("{\"action\":\"action\",\"data\":{\"1009558\":{\"weekNumber\":2,\"someData\":\"someData\"}}}", DatabaseEntry.class);
        System.out.println(databaseEntry);
    }

    private static void serializeTest() throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String,Map<String,String>> data = new HashMap<>();
        Map<String,String> values = new HashMap<>();
        values.put("weekDay","2");
        values.put("unpredictableValue","value");
        data.put("1009558", values);
        String action = "action";
        DatabaseEntry dbEntry = new DatabaseEntry();
        dbEntry.setAction(action);
        dbEntry.setData(data);
        System.out.println(objectMapper.writeValueAsString(dbEntry));
    }
}

模型:包com.github.xsavikx.jackson;

import java.util.Map;

public class DatabaseEntry {
    private String action;
    private Map<String, Map<String,String>> data;

    public DatabaseEntry() {

    }

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public Map<String, Map<String, String>> getData() {
        return data;
    }

    public void setData(Map<String, Map<String, String>> data) {
        this.data = data;
    }
}

使用 Spring Boot,服務器和客戶端之間的 json 轉換是自動的( https://stackoverflow.com/a/44842806/3793165 )。

這種方式對我有用:

控制器

@PostMapping(value="/nuevoVideo")
    @ResponseBody
    public RespuestaCreateVideo crearNuevoVideo(@RequestBody PeticionVideos datos) {
       RespuestaCreateVideo respuesta = new RespuestaCreateVideo();
       respuesta.setData("datos");
       //respuesta.setError("error"); // implement the logic for error and return the message to show to the user.
      return respuesta;
    }

其中 PeticionVideos (RequestVideos) 是數據表編輯器發送的創建結構(帶有 setter、getter...):

public class PeticionVideos {
    private Map<String, Video> data;
    private String action;
}

從服務器到客戶端數據表正在等待的響應具有特定格式(請查看https://editor.datatables.net/manual/server )。

我經常使用這個:

public class RespuestaCreateVideo { //ResponseCreateVideo
    private String data;
    private String error;
}

經過兩天的嘗試,現在工作完美了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM