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