ฉันใช้ jackson 2.9.6
ฉันมีวัตถุที่ฉันต้องการทำให้เป็นอนุกรมและดีซีเรียลไลซ์ นี่คือชั้นเรียน Post
โพสต์.จาวา
public class Post extends GenericJson {
private Long id;
private String name;
private int count;
private List<Comment> commentList;
// Getter and setter
}
public class Comment extends GenericJson{
private Long id;
private String text;
private int count;
// Getter and setter
}
ข้อมูล JSON
{
"id" : 123,
"name" : "azeem",
"count" : 1,
"commentList" : [
{
"id" : 312,
"text" : "simple comment",
"count" : 3
},
{
"id" : 31221231231231,
"text" : "simple comment 2",
"count" : 1
}
]
},
"id" : 123127877186786,
"name" : "arfan",
"count" : 5,
"commentList" : [
{
"id" : 312,
"text" : "simple comment",
"count" : 3
},
{
"id" : 31221231231231,
"text" : "simple comment 2",
"count" : 1
}
]
}
ฉันใช้ ObjectMapper
ในการอ่านและเขียนเช่นนี้
สำหรับการเขียน
objectMapper.writeValue(fileDir, postObject);
สำหรับการอ่าน
objectMapper.readValue(savedFileDir, Post.class); // Error can't cast int to long
อย่างที่คุณเห็นว่ามีข้อผิดพลาด can't cast int to long post['id'] และเหมือนกันใน commentList
นี่เป็นเพราะใน ข้อมูล Json อันดับแรก id
คือ 123 ดังนั้น jackson
ให้พิจารณาว่าเป็น int
และพยายามบันทึกไว้ใน Long id
ฉันเห็นคำตอบบน StackOverFlow ที่ใช้ DeserializationFeature.USE_LONG_FOR_INTS
แต่ฉันใช้ไม่ได้เพราะมีคุณสมบัติอื่น count
ที่ฉันต้องการใน int
ถ้าฉันใช้ DeserializationFeature.USE_LONG_FOR_INTS
มันแสดงข้อผิดพลาดว่า Long ไม่สามารถส่งไปยัง int post['count'] และเหมือนกับ commentList
ฉันต้องการถามว่ามีวิธีใดบ้างที่ฉันสามารถแปลงคุณสมบัติเฉพาะเป็นประเภทดั้งเดิมเฉพาะได้ ตัวอย่างเช่นในกรณีนี้ ฉันต้องการคุณสมบัติ id
อยู่ใน Long
เสมอทั้งใน Post
และ Comment
คุณสมบัติอื่นๆ ดีหมดครับ
คุณช่วยบอกฉันหน่อยได้ไหมว่าฉันจะทำอย่างไร
อัปเดต
คลาส Post
และ Comment
เป็นคลาสที่สร้างขึ้นโดยอัตโนมัติ และไม่สามารถทำการเปลี่ยนแปลงใดๆ ในไฟล์เหล่านี้ได้ จริงๆ แล้วฉันใช้ ปลายทางระบบคลาวด์ของ Google v2 ไฟล์เหล่านี้สร้างโดย ปลายทางระบบคลาวด์ จุดสิ้นสุดของคลาวด์ใช้ jackson
lib เดียวกันในการแปลงข้อมูล json เป็นวัตถุคลาสเหล่านี้ แต่ฉันไม่รู้ว่ามันทำ
id
จำเป็นต้องเป็นประเภท wrapper หรือไม่ คุณสามารถเปลี่ยนเป็นดั้งเดิมlong
ได้หรือไม่? - person ernest_k   schedule 31.07.2018