[英]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.