আমি com.fasterxml.jackson.databind.ObjectMapper ব্যবহার করে একটি অপরিবর্তনীয় অবজেক্টটি সিরিয়ালাইজ করতে এবং ডিজিটালাইজ করতে চাই।
অপরিবর্তনীয় বর্গটি দেখতে দেখতে (কেবলমাত্র 3 টি অভ্যন্তরীণ গুণাবলী, গিটার এবং নির্মাণকারী):
public final class ImportResultItemImpl implements ImportResultItem {
private final ImportResultItemType resultType;
private final String message;
private final String name;
public ImportResultItemImpl(String name, ImportResultItemType resultType, String message) {
super();
this.resultType = resultType;
this.message = message;
this.name = name;
}
public ImportResultItemImpl(String name, ImportResultItemType resultType) {
super();
this.resultType = resultType;
this.name = name;
this.message = null;
}
@Override
public ImportResultItemType getResultType() {
return this.resultType;
}
@Override
public String getMessage() {
return this.message;
}
@Override
public String getName() {
return this.name;
}
}
তবে আমি যখন এই ইউনিট পরীক্ষা চালাচ্ছি:
@Test
public void testObjectMapper() throws Exception {
ImportResultItemImpl originalItem = new ImportResultItemImpl("Name1", ImportResultItemType.SUCCESS);
String serialized = new ObjectMapper().writeValueAsString((ImportResultItemImpl) originalItem);
System.out.println("serialized: " + serialized);
//this line will throw exception
ImportResultItemImpl deserialized = new ObjectMapper().readValue(serialized, ImportResultItemImpl.class);
}
আমি এই ব্যতিক্রম পাই:
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class eu.ibacz.pdkd.core.service.importcommon.ImportResultItemImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: {"resultType":"SUCCESS","message":null,"name":"Name1"}; line: 1, column: 2]
at
... nothing interesting here
এই ব্যতিক্রমটি আমাকে একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করতে বলে, তবে এটি একটি পরিবর্তনযোগ্য অবজেক্ট, তাই আমি এটি রাখতে চাই না। এটি কীভাবে অভ্যন্তরীণ বৈশিষ্ট্যগুলি সেট করবে? এটি সম্পূর্ণরূপে এপিআই এর ব্যবহারকারীকে বিভ্রান্ত করবে।
সুতরাং আমার প্রশ্নটি: আমি কি কোনওরকমভাবে ডিফল্ট নির্মাতা ছাড়াই অপরিবর্তনীয় বস্তুগুলিকে ডি / সিরিয়ালাইজ করতে পারি?