2012-05-18 4 views
0

모든 유형의 POJO를 허용하고 특정 반향 메소드를 살펴보고 키를 만들기 위해 Java 반사 및 주석을 사용하여 Pojo를 JSON 객체로 변환하는 유틸리티 클래스를 만들려고합니다. , 값 json 요소를 기반으로합니다.제네릭을 사용하여 Java에서 리플렉션을 통해 클래스 메서드 가져 오기

문제는 제가 제네릭을 사용하려고 시도하지만 나던가 작동하지 않는 것/가능하지 않다는 것입니다.

기본적으로 클래스 개체를 매개 변수로 전달하고 가능한 경우 올바른 클래스 메서드를 검색하고 싶습니까? . 내가 지금까지 쓴

코드 : 여기

package com.jr.freedom.util; 

import java.lang.reflect.Field; 
import java.lang.reflect.Method; 

import net.sf.json.JSONObject; 

public class JsonParserUtil { 

    private static final String GET_CHAR_SEQUENCE = "get"; 

    public static <T> JSONObject toJsonObject(Class<T> classObject) { 
     // get Method names with @JsonElement included 

     Method methods[] = classObject.class.getDeclaredMethods(); 

     JSONObject jsonObject = new JSONObject(); 
     try { 
      for (int i = 0; i < methods.length; i++) { 
       String key = methods[i].getName(); 
       System.out.println(key); 
       if (methods[i].isAnnotationPresent(JsonElement.class) && key.contains(GET_CHAR_SEQUENCE)) { 
        key.replaceFirst(GET_CHAR_SEQUENCE, ""); 
        jsonObject.put(key, methods[i].invoke(classObject)); 
       } 

      } 
      return jsonObject; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 

} 

는 getter와 setter를 가진 간단한 POJO이다 JSON 위가

User user = new User(); 
     user.setBio("bio mate"); 
     user.setCountry("uk"); 
     user.setEmailAddress("[email protected]"); 
     user.setFirstName("jono"); 
     user.setPassword("passwordfdsadsa"); 
     user.setUsername("crazy8"); 
     JSONObject jsonUser = new JsonParserUtil<User>().toJsonObject(user); 

사용자 객체 클래스 백분율 사용하려고 testMethod입니다. 현재이 줄에 : Method methods [] = T.class.getDeclaredMethods(); 당신은 일반 T를 사용하여 선언 된 메소드를 얻을 수 없으므로 작동하지 않을 것입니다. 그렇게하는 방법이 있습니까? 아니면 내가 만든 모든 POJO에 대해 thios util 메서드를 만들어야합니까?

나는 그것이 작동합니다 : Method methods [] = User.class.getDeclaredMethods(); 하지만 이는 User 클래스에만 적용됩니다. 나는 기본적으로 어떤 POJO 객체를 취할 수 있고 jsonObject를 자동으로 생성하려고하는 util json 클래스를 생성하려고 시도하고있다. 사전

+1

를 사용하는

public static JSONObject toJsonObject(Object classObject) { // get Method names with @JsonElement included Method methods[] = classObject.getClass().getDeclaredMethods(); JSONObject jsonObject = new JSONObject(); try { for (int i = 0; i < methods.length; i++) { String key = methods[i].getName(); System.out.println(key); if (methods[i].isAnnotationPresent(JsonElement.class) && key.startsWith(GET_CHAR_SEQUENCE)) { key = key.replaceFirst(GET_CHAR_SEQUENCE, ""); jsonObject.put(key, methods[i].invoke(classObject)); } } return jsonObject; } catch (Exception e) { e.printStackTrace(); return null; } } 

. 나는 문제를 해결했다. \t public static JSONObject toJsonObject (Object classObject) { \t 메소드 메소드 [] = classObject.getClass(). getDeclaredMethods(); – jonney

+0

질문에 답하는 것이 좋습니다. 설문에 답변을 추가하지 말고 직접 질문하는 것이 좋습니다. – Renato

+0

완료. – jonney

답변

0

해결 방법 : 키 존재가 신경 끄시 고

classObject.getClass() 
0

에서

덕분에 당신은 클래스 자체를 반환 클래스의 클래스를 얻기 위해 노력하고 있습니다.

사용자 클래스가 이미 있으므로 classObject.getDeclaredMethods()이 작동해야하지만 여전히 직렬화 할 객체가 필요하거나 사용자 객체를 전달하여 직렬화 한 다음 객체에서 클래스 유형을 가져 와서 직렬화 할 수 있습니다.

+0

으로 정렬했습니다. 솔루션을 제공했습니다. 제네릭을 사용할 필요가 없습니다. 나는 간단히 객체를 엉덩이로 가져 와서 그 객체 클래스를 얻고 나의 마법을 다룬다. 그것은 작동합니다. 그냥 테스트 :) – jonney

관련 문제