arrays - 是否可以使用 Spring Boot 将嵌套的 Json 数组存储到数据库?
问题描述
这是我的 Json 格式
[ {
"basicInfo": {
"uniqueFileNo": "123456tf",
"actualOrgid": "3",
"tRefNo": "Test Tender 1",
"tType": "Open Tender",
"tFormContract": "Works",
"tNoOfCovers": "2",
"tTenderCategory": "Works",
"tNoOfBidOpeners": "2 Off 2",
"tAllowAutomaticEvaluation": "false",
"tAllowMultiCurrencyForBoq": "false",
"creatorName": "Wils",
"creatorReference": "WilsDG"
},
"multiCurrencyForBoq": "",
"boqinfo": "",
"coverinfo": {
"cover": [
{
"tCoverNo": "1",
"tDocDesc": "Scanned Fee Details",
"tDocType": ".pdf"
},
{
"tCoverNo": "2",
"tDocDesc": "UnScanned Fee Details",
"tDocType": ".csv"
}
]
}
}
]
我几乎完成了但是,在保存
cover
**array Structure 时遇到问题 ** 帮我解决这个问题错误是
Cannot deserialize value of type
com.demo.model.Cover from Array value (token
JsonToken.START_ARRAY) at [Source: (BufferedInputStream); line: 19, column: 25] (through reference chain: java.util.ArrayList[0]->com.demo.model.TenderBasicDetails["coverinfo"]->com.demo.model.CoverInfo["cover"])
请帮我解决这个问题,伙计们 谢谢
解决方案
由于您没有提供代码,我真的不知道出了什么问题,但这可能是您定义属性和/或类结构的方式:
笔记:
使用@JsonIgnoreProperties(ignoreUnknown = true)
是因为我不想定义您在 JSON 中拥有的每个元素
@Data
Lombok 注释,但是您可以创建 Getter/Setters
@JsonProperty
确保 JSON 字段名称映射到类字段。
应该是这样的:
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Wrapper{
private BasicInfo basicInfo;
private String multiCurrencyForBoq;
private String boqinfo;
private CoverInfo coverinfo;
}
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class BasicInfo{
private String uniqueFileNo;
private String actualOrgid;
private String tRefNo;
}
@Data
public class CoverInfo{
private List<CoverDetails> cover = new ArrayList<>();
}
@Data
public class CoverDetails{
@JsonProperty("tCoverNo")
private String tCoverNo;
@JsonProperty("tDocDesc")
private String tDocDesc;
@JsonProperty("tDocType")
private String tDocType;
}
public static void main(String[] args) throws Exception{
ObjectMapper objectMapper = new ObjectMapper();
String json = "[ {\n" +
" \"basicInfo\": {\n" +
" \"uniqueFileNo\": \"123456tf\",\n" +
" \"actualOrgid\": \"3\",\n" +
" \"tRefNo\": \"Test Tender 1\",\n" +
" \"tType\": \"Open Tender\",\n" +
" \"tFormContract\": \"Works\",\n" +
" \"tNoOfCovers\": \"2\",\n" +
" \"tTenderCategory\": \"Works\",\n" +
" \"tNoOfBidOpeners\": \"2 Off 2\",\n" +
" \"tAllowAutomaticEvaluation\": \"false\",\n" +
" \"tAllowMultiCurrencyForBoq\": \"false\",\n" +
" \"creatorName\": \"Wils\",\n" +
" \"creatorReference\": \"WilsDG\"\n" +
" },\n" +
" \"multiCurrencyForBoq\": \"\",\n" +
" \"boqinfo\": \"\",\n" +
" \"coverinfo\": {\n" +
" \"cover\": [\n" +
" {\n" +
" \"tCoverNo\": \"1\",\n" +
" \"tDocDesc\": \"Scanned Fee Details\",\n" +
" \"tDocType\": \".pdf\"\n" +
" },\n" +
" {\n" +
" \"tCoverNo\": \"2\",\n" +
" \"tDocDesc\": \"UnScanned Fee Details\",\n" +
" \"tDocType\": \".csv\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" }\n" +
" ]";
System.out.println(objectMapper.readValue(json, new TypeReference<List<Wrapper>>(){}));
}
日志:
[DemoApplication.Wrapper(basicInfo=DemoApplication.BasicInfo(uniqueFileNo=123456tf, actualOrgid=3, tRefNo=null), multiCurrencyForBoq=, boqinfo=, coverinfo=DemoApplication.CoverInfo(cover=[DemoApplication.CoverDetails(tCoverNo=1, tDocDesc=Scanned Fee Details, tDocType=.pdf), DemoApplication.CoverDetails(tCoverNo=2, tDocDesc=UnScanned Fee Details, tDocType=.csv)]))]
=====已编辑 ============
请清理您的代码:
- 放置
@JsonIgnoreProperties(ignoreUnknown = true)
在班级级别,并从所有字段中删除... - 如果您使用
Lombok @Data
,请删除所有 getter/setter - 从所有地方删除所有
@JsonProperty
...... - 修改你
Cover.java
有:
@JsonProperty("tCoverNo")
private String tCoverNo;
@JsonProperty("tDocDesc")
private String tDocDesc;
@JsonProperty("tDocType")
private String tDocType;
@JsonProperty 背后的要点是绑定一个名称与 json 字段不同的类字段。
Class Field : blah
Json Field: BLAH
@JsonProperty("BLAH")
推荐阅读
- javascript - puppeteer-page-proxy 模块:没有通过 useProxy() 功能?
- flutter - Flutter WebView中关闭小米MIUI深色模式
- azure-devops - ADO 下载最新和以前的工件
- python - 遇到问题: src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4 in function 'getPerspectiveTransform'
- javascript - 反引号内的反引号
- javascript - 未捕获的 SyntaxError:缺失:在属性 id 之后
- python - CNN 用于不同尺寸的 3D 图像分割
- javascript - 使用 Fetch API 时捕获个别错误
- ms-project - MS项目混乱
- node.js - 带有正则表达式的 Nginx 映射不接受查询字符串