Я хочу создать несколько типов Java-объектов, используя один JSON-файл.
Я думал о хранении различных типов Java-объектов в форме карты, где ключом будет имя типа объекта, а значение будетбыть самим объектом, как показано ниже
Field2_AllIn1.json
{
"fetchMapOfStringType": {
"hi": "hello"
},
"fetchMapFieldType": {
"5b0b8a5545424a20487ee2bc": {
"fieldId": "5b0b8a5545424a20487ee2bc",
"value": "25",
"values": [],
"visible": true,
"fieldValidationErrors": [],
"globalValidationErrors": [
{
"fieldValidationId": "5b0b8a5545424a20487ee2bc",
"validationErrorMessage": "this is error"
}
],
"formulaErrors": []
}
}
}
первый хранит простой тип String, второй хранит объект Java типа map, где Field - это пользовательский класс
public class JsonJacksonAllInOne {
public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException{
try {
// read JSON from a file
Map<String, Object> map = mapper.readValue(
new File("C://json/Field2_AllIn1.json"),
new TypeReference<Map<String, Object>>() {
});
//type String
//String type works fine
Object obj1 = map.get("fetchMapOfStringType");
Map<String, String> mapStringType = (Map<String, String>) obj1;
System.out.println(mapStringType.get("hi"));//this prints hello
//second type ... type casting to object type to objectId and Field map
Map<ObjectId, Field> map1 = (Map<ObjectId, Field>) map.get("fetchMapFieldType");
ObjectId k1 = new ObjectId("5b0b8a5545424a20487ee2bc");
Field f1 = map1.get(k1);
//this code gives value of f1 as null
// this gives class cast exception
// java.util.LinkedHashMap cannot be cast to com.dto.Field
Field f2 = map1.get("5b0b8a5545424a20487ee2bc");
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
, как вы можете видеть комментарии в коде.один дает ноль, другой дает исключение приведения класса. Я думаю, что приведение не работает, как я могу получить объекты требуемого типа. Есть ли другой способ, где я могу использовать один файл JSON для создания различных объектов Java, таких как карты и список пользовательскихклассы??Я хочу избегать использования разных файлов JSON для создания разных объектов Java