ฉันใช้ com.fasterxml.jackson.databind
ในแอปพลิเคชันสปริงบูต เมื่อฉันส่งคำขอไปยังปลายทางของฉัน ฉันได้รับข้อยกเว้นต่อไปนี้:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of
org.pacakge.domain.controller.Mycontroller (although at least one Creator exists): cannot
deserialize from Object value (no delegate- or property-based Creator)\n at
[Source: (PushbackInputStream); line: 2, column: 3] Is the body of the request formatted correctly?
ตัวควบคุมของฉันประมวลผลเนื้อหาคำขอที่มีโครงสร้างดังต่อไปนี้:
{
"portalId": 123,
"objectType": "TYPE",
"objectTypeId": "0-3",
"objectId": 123,
"properties": { ... }
}
คุณสมบัติเดียวที่ฉันต้องการคือ objectId
ฉันได้สร้างคลาสเพื่อประมวลผลวัตถุนี้ดังนี้:
@lombok.Value
private static class MyObject {
@JsonAlias("objectId")
private final String dealId;
}
ฉันได้ออกแบบคอนโทรลเลอร์ที่มีลักษณะเช่นนี้
@Slf4j
@RestController
@RequestMapping(path = "/entrypoint")
public class MyController {
@Autowired
public MyController(){}
/**
* REST endpoint handles MyObject
*/
@PostMapping(value = "/endpoint")
public void handleRequest(
@Valid @RequestBody MyObject command
) {
log.debug(command.getDealId());
}
@lombok.Value
private static class MyObject {
@JsonAlias("objectId")
private final String dealId;
}
}
สิ่งที่น่าสนใจเกี่ยวกับปัญหานี้ก็คือคำขอของฉันได้รับการประมวลผลได้ดีหากฉันเปลี่ยน MyObject
เป็นโครงสร้างต่อไปนี้:
@lombok.Value
private static class MyObject {
@JsonAlias("objectId")
private final String dealId;
private final JSONObject properties; // TODO we shouldn't need this. Fix.
}
ฉันไม่สามารถเข้าใจได้ว่าปัญหาคืออะไร ฉันชอบความช่วยเหลือเกี่ยวกับปัญหานี้ อาจมีคำอธิบายประกอบที่ฉันหายไป? ฉันหวังว่าคนอื่นประสบปัญหานี้ ฉันไม่พบข้อมูลใด ๆ เพียงแค่ค้นหาในเว็บ