我在春季引导应用程序中使用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.
}我似乎搞不清是什么问题。我希望在这个问题上有所帮助。也许有注释说我错过了?我希望其他人也经历过这个问题。我只是在网上搜索,还没有找到任何信息。
发布于 2020-04-17 14:26:32
我在项目的根目录中向lombok.config添加了以下行:
lombok.anyConstructor.addConstructorProperties=true之后,使用@JsonIgnoreProperties注释使用这个DTO反序列化您的JSON:
@Value
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject {
@JsonProperty("objectId")
String dealId;
}https://stackoverflow.com/questions/61273031
复制相似问题