ฉันต้องการทำให้เป็นอนุกรมและแยกส่วนของวัตถุที่ไม่เปลี่ยนสถานะโดยใช้ 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
ข้อยกเว้นนี้ขอให้ฉันสร้างตัวสร้างเริ่มต้น แต่นี่เป็นวัตถุที่ไม่เปลี่ยนรูปดังนั้นฉันจึงไม่ต้องการมี มันจะตั้งค่าคุณสมบัติภายในอย่างไร? มันจะทำให้ผู้ใช้ API สับสนโดยสิ้นเชิง
ดังนั้นคำถามของฉันคือฉันสามารถ de / serialize วัตถุที่ไม่เปลี่ยนรูปโดยไม่มีตัวสร้างเริ่มต้นได้หรือไม่?