আপনি যখন জ্যাকসনটি স্ট্রিং থেকে আপনার কংক্রিট শ্রেণিতে মানচিত্রের জন্য ব্যবহার করেন, বিশেষত যদি আপনি জেনেরিক ধরণের সাথে কাজ করেন। তাহলে এই সমস্যাটি বিভিন্ন শ্রেণীর লোডার কারণে ঘটতে পারে। নীচের দৃশ্যের সাথে আমি এটি একবারে পূরণ করেছি:
প্রকল্প বি লাইব্রেরি এ এর উপর নির্ভর করে
গ্রন্থাগার এ:
public class DocSearchResponse<T> {
private T data;
}
এটিতে বাহ্যিক উত্স থেকে ডেটা জিজ্ঞাসা করার পরিষেবা রয়েছে এবং কংক্রিট শ্রেণিতে রূপান্তর করতে জ্যাকসন ব্যবহার করুন
public class ServiceA<T>{
@Autowired
private ObjectMapper mapper;
@Autowired
private ClientDocSearch searchClient;
public DocSearchResponse<T> query(Criteria criteria){
String resultInString = searchClient.search(criteria);
return convertJson(resultInString)
}
}
public DocSearchResponse<T> convertJson(String result){
return mapper.readValue(result, new TypeReference<DocSearchResponse<T>>() {});
}
}
প্রকল্প বিতে:
public class Account{
private String name;
}
এবং আমি জিজ্ঞাসা তৈরি করতে এবং পাশাপাশি ডেটা রূপান্তর করতে লাইব্রেরি থেকে পরিষেবাএ ব্যবহার করি
public class ServiceAImpl extends ServiceA<Account> {
}
এবং এটি ব্যবহার করুন
public class MakingAccountService {
@Autowired
private ServiceA service;
public void execute(Criteria criteria){
DocSearchResponse<Account> result = service.query(criteria);
Account acc = result.getData();
}
}
এটি ঘটেছিল কারণ লাইব্রেরিএর ক্লাস লোডার থেকে, জ্যাকসন অ্যাকাউন্ট ক্লাসটি লোড করতে পারে না, তারপরে জ্যাকসনকে convertJson
তার কাজটি করার জন্য প্রজেক্ট বি তে কেবল ওভাররাইড পদ্ধতি
public class ServiceAImpl extends ServiceA<Account> {
@Override
public DocSearchResponse<T> convertJson(String result){
return mapper.readValue(result, new TypeReference<DocSearchResponse<T>>() {});
}
}
}