/ / वसंत RestTemplate और जेनेरिक प्रकार पैरामीटरेट टाइप प्रकार संदर्भ सूची जैसे सूची <टी> - जावा, resttemplate, वसंत-आराम, वसंत-वेब

स्प्रिंग रेस्ट टेम्पलेट और जेनेरिक प्रकार पैरामीटरेट टाइप टाइप रेफरेंस संग्रह जैसे सूची <टी> - जावा, रेस्टटेम्प्लेट, वसंत-आराम, वसंत-वेब

एक सार नियंत्रक वर्ग को आरईएसटी से वस्तुओं की सूची की आवश्यकता होती है। स्प्रिंग रेस्ट टेम्पलेट का उपयोग करते समय यह आवश्यक कक्षा में मैप नहीं कर रहा है बल्कि यह लिंक्ड हैशमैप लौटाता है

 public List<T> restFindAll() {

RestTemplate restTemplate = RestClient.build().restTemplate();
ParameterizedTypeReference<List<T>>  parameterizedTypeReference = new ParameterizedTypeReference<List<T>>(){};
String uri= BASE_URI +"/"+ getPath();

ResponseEntity<List<T>> exchange = restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);
List<T> entities = exchange.getBody();
// here entities are List<LinkedHashMap>
return entities;

}

अगर मैं उपयोग करता हूँ,

ParameterizedTypeReference<List<AttributeInfo>>  parameterizedTypeReference =
new ParameterizedTypeReference<List<AttributeInfo>>(){};
ResponseEntity<List<AttributeInfo>> exchange =
restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);

यह बढ़िया काम करता है। लेकिन सभी उपखंडों, किसी अन्य समाधान में नहीं डाल सकते हैं।

उत्तर:

उत्तर № 1 के लिए 10

मैंने निम्नलिखित सामान्य विधि का उपयोग करके इस पर काम किया:

public <T> List<T> exchangeAsList(String uri, ParameterizedTypeReference<List<T>> responseType) {
return restTemplate.exchange(uri, HttpMethod.GET, null, responseType).getBody();
}

तब मैं फोन कर सकता था:

List<MyDto> dtoList = this.exchangeAsList("http://my/url", new ParameterizedTypeReference<List<MyDto>>() {});

इसने मेरे कॉलर्स को निर्दिष्ट करने के साथ बोझ किया ParameterizedTypeReference कॉल करते समय, लेकिन इसका मतलब था कि मुझे vels4j के उत्तर में प्रकारों की स्थिर मैपिंग रखने की आवश्यकता नहीं थी


जवाब के लिए 3 № 2

वसंत से समाधान नहीं मिला, इसलिए मैंने इसे किया है ParameterizedTypeReference में HashMap पसंद

 public final static HashMap<Class,ParameterizedTypeReference> paramTypeRefMap = new HashMap() ;
static {
paramTypeRefMap.put(AttributeDefinition.class, new ParameterizedTypeReference<List<AttributeDefinition>>(){} );
paramTypeRefMap.put(AttributeInfo.class, new ParameterizedTypeReference<List<AttributeInfo>>(){} );
}

और इसका इस्तेमाल किया

ParameterizedTypeReference parameterizedTypeReference = paramTypeRefMap.get(requiredClass);
ResponseEntity<List> exchange = restTemplate.exchange(uri, HttpMethod.POST, entity, parameterizedTypeReference);