我正在構建一個 REST API,它接受來自用戶的以下 JSON 格式的輸入。的細節是嵌套JSON這些物件的密鑰值是動態的和它的相關聯的資料型別也是動態的。就像下面的顏色是一個字串串列,ram 是一個整數串列,值也可以是字串、布林值和整數型別。如何構建請求 POJO 類以將請求 JSON 轉換為請求物件,考慮到細節在鍵、值及其資料型別方面是動態的。在下面的 JSON 中,具體可以有 0..n 個鍵值,其值資料型別可以是字串串列、整數串列、僅字串、僅布林值或僅整數值。如何將我的請求映射到 Spring Boot 后端中的 POJO。
{
name : {
subtitle : "iPhone xr",
title: "The new iphone"
},
specifics: {
"color" : ["red","blue","green"],
"ram" : [ 32 , 64 ],
"length": 7,
"model" : 10 ,
"hasLight" : true
},
description: {
short: " This is short description",
long: " This is long description ",
language: "en"
}
}
班級
class Item{
private Title title;
private Specifics specifics; //How to make this dynamic and key-value with distinct data type
private Description description;
}
public class Title {
private String subtitle;
private String title;
}
public class Description {
private String shortDes;
private String longDes;
private String language;
}
uj5u.com熱心網友回復:
我能想到的處理這個問題的唯一可能的方法是將specifics屬性設為 Map ,如下所示:
class Item {
private Title title;
private Map<String, Object> specifics;
private Description description;
}
現在丑陋的部分是當您需要(如果您確實需要)處理資料時。考慮以下示例:
public static void main(String[] args) {
Map<String, Object> specifics = new HashMap<>();
specifics.put("color", List.of("red","blue","green"));
specifics.put("ram", List.of(32 , 64));
specifics.put("length", 7);
specifics.put("model", 10);
specifics.put("hasLight", true);
Item item = new Item(specifics);
for (Object object : item.getSpecifics().values()) {
if (object instanceof List) {
System.out.println("::::: List :::::");
for (Object listObject : (List) object) {
if (String.class.isAssignableFrom(listObject.getClass())) {
System.out.println("String: " object);
}
if (Number.class.isAssignableFrom(listObject.getClass())) {
System.out.println("Number: " object);
}
}
}
if (object instanceof Number) {
System.out.println("Number: " object);
}
if (object instanceof Boolean) {
System.out.println("Boolean: " object);
}
}
}
public static class Item {
private Map<String, Object> specifics;
public Item(Map<String, Object> specifics) {
this.specifics = specifics;
}
public Map<String, Object> getSpecifics() {
return specifics;
}
}
正如您所看到的,處理每一種可能性的邏輯都很丑陋,并且只會隨著更多的可能性變得更丑。不幸的是,周圍沒有。
uj5u.com熱心網友回復:
除了使用 POJO 類將請求 JSON 轉換為請求物件之外,您還可以使用Map. 然后,您必須根據需要分析Map<String, Object>和轉換值 ( Object)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343376.html
