0
개체 매퍼에 대한 JSON을 만들려고합니다. 주요 개념은 "user"가 키가 JSON 속성이고 값이 Objects 속성 이름 인 사전을 정의한다는 것입니다. 그래서 어떻게 (지금까지) 작동합니까 : 동적으로 값을 설정 (동적 속성/유형)
- 가져 오기 값과 JSON에서 값을 삽입
jsonValue를 객체에 동적으로 캐스트 할 수 없다는 문제가 있습니다. 객체 유형 (methodType)이 무엇인지 확인한 다음 String, Long, Integer 등과 같이 다르게 캐스팅해야합니다. 어떻게 든 그것을 동적으로 캐스팅 할 수 있습니까?
private Cookbook createCookbook(JsonObject jsonCookbook) {
//Cookbook to return
Cookbook cookbook = new Cookbook();
Enumeration<String> e = mappingDictionary.keys();
while (e.hasMoreElements()) {
//get JSON value
String mappingKey = e.nextElement();
JsonElement json = jsonCookbook.get(mappingKey);
String jsonValue = json.getAsString();
//set JSON value to property
String mappingValue = mappingDictionary.get(mappingKey);
//reflection
try {
//get type of the getter
String getMethodName = "get" + mappingValue;
Method getMethod = cookbook.getClass().getMethod(getMethodName, null);
Class<?> methodType = getMethod.getReturnType();
//set methods
String setMethodName = "set" + mappingValue;
Method setMethod = cookbook.getClass().getMethod(setMethodName, methodType);
//set value to property
/* DONT WANT TO DO IT LIKE THIS, THIS IS MY PROBLEM */
if (methodType.equals(String.class))
setMethod.invoke(cookbook, jsonValue);
if (methodType.equals(Long.class))
setMethod.invoke(cookbook, Long.valueOf(jsonValue));
} catch (NoSuchMethodException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return cookbook;
}
methodType.newInstance();로 새 클래스를 만드는 것이 좋습니다. 하지만 내 String (jsonValue)을 새로 생성 된 객체로 변환하는 방법을 모르겠습니다. – paxx
ObjectInputStream의 소스를 확인하십시오. 메서드 "private Object readArray"는 귀하의 질문에 대한 대답을 포함 할 수 있습니다 –
ObjectInputStream을 검사했지만 유형을 감지하고 유형을 개별적으로 파싱하는 것을 볼 수 있습니다 .. 그 방법은 .. 갈 수 있습니다. 어떤 "똑똑한"방법을 찾아야한다. – paxx