2014-12-30 2 views
0

나는 REST를 통해 노출 된 서비스에 대한 클라이언트를 만들려고합니다. 하나의 클래스를 확장하는 여러 개의 클래스가 있습니다.자바에서 런타임에 타입 변환을 수행하는 방법은 무엇입니까?

이제 요청을 보내고 응답을 받으면 특정 class.i에 대한 응답을 캐스팅해야 할 때마다 런타임에이 프로세스를 자동화하려고합니까?

나는 제네릭과 리플렉션을 사용하려고 생각하지만 앞으로 나아갈 수 없다. 정확하게 달성하기를 원하는 것은 고유 한 문자열을 언급하거나 요청이라고 말하면서 똑같은 응답을 타입 캐스팅없이 얻을 수 있어야한다. 특정 응답 클래스.

제네릭을 사용하여 일부 형식 코드를 줄이는 데 성공했지만 여전히 런타임에 완벽하게 구현하려면 만족하지 못했습니다.

RequestClass request=(RequestClass)getRequest(some attributes); 
output=(Responseclass)response.getResult(); 

여기 요청 및 응답 클래스에 대해 언급 할 때마다이 작업을 수행하고 싶지 않습니다.

내가 요청 및 응답 클래스를 키 또는 문자열에 매핑 할 수있는 곳에서 코드를 요청 및 응답 클래스를 가져오고 그것에 따라 작업을 수행 할 수 있습니다.

이 작업을 수행하는 방법을 안내하거나 위에 언급 한 작업을 수행 할 수있는 다른 방법을 알려주십시오. 미리 감사드립니다.

+2

당신이 도움이 필요한 일에 대해 더 많은 정보를 제공하십시오. 예를 들어, 예제 요청과 해당 응답을 포함시켜야합니다. – Floegipoky

+0

당신이 묻는 것을 이해하는 것은 여전히 ​​어렵습니다. 코드의 모습을 보여줄 수 있습니까? 당신은'getRequest'와'getResult' 메소드에 대한 코드를 제어합니까? – VGR

답변

-1

많은 Java REST 라이브러리 중 하나를 사용하는 것을 고려하십시오. 우리 클라이언트는 Jersey API를 사용하여 Python 기반 RESTful 서버에 대한 요청 및 응답을 처리합니다.

Jersey는 일반 응답 데이터를 저장하는 ClientResponse 클래스를 사용합니다. getEntity 메소드를 사용하여 응답을 특정 유형으로 리턴 할 수 있습니다. 여기

은 문자열을 다루는 내 코드의 발췌 한 것입니다,하지만 당신은 그것을 확장 할 수있는 방법을 볼 수 있습니다

ClientResponse response; //a Jersey class 
    String responseText; 
    WebResource odbc = resourceCollection.path("ODBC"); //another Jersey class 
    try { 
     //we send a POST and get a response stored as generic 
     response = odbc.type(media) 
       .accept(MediaType.APPLICATION_XML,MediaType.TEXT_PLAIN) 
       .post(ClientResponse.class, formdata); 
     //we pull out the response entity as a string 
     responseText = response.getEntity(String.class); 
    } catch (UniformInterfaceException e) { 
     write("<UniformInterfaceException>\n"); 
     write(" Response type was not expected\n"); 
     write("</UniformInterfaceException>\n"); 
     return;   
    } catch (ClientHandlerException e) { 
     write("<Error>\n"); 
     write(" Unable to connect or connection refused\n"); 
     write("</Error>\n"); 
     return; 
-1
public class DynamicCasting{ 
    DynamicCasting e1=new DynamicCasting(); 
    private Object obj=new Object(); 
    DynamicCasting.doSomething(obj); 
    public static DynamicClass doSomething(DynamicClass dynClassObject){ 
     return dynClassObject; 
    } 
} 

The obj will be type casted to DynamicClass in this example. 
관련 문제