Java Fasterxml Jackson数据绑定不匹配InputException

Java Fasterxml Jackson数据绑定不匹配InputException,java,spring-boot,jackson,jackson-databind,Java,Spring Boot,Jackson,Jackson Databind,我正在spring boot应用程序中使用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): cann

我正在spring boot应用程序中使用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": { ... }
}
@lombok.Value
  private static class MyObject {
    @JsonAlias("objectId")
    private final String dealId;
    private final JSONObject properties;  // TODO we shouldn't need this.  Fix.
  }
我需要的唯一属性是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更改为以下结构,我的请求将得到很好的处理:

{
  "portalId": 123,
  "objectType": "TYPE",
  "objectTypeId": "0-3",
  "objectId": 123,
  "properties": { ... }
}
@lombok.Value
  private static class MyObject {
    @JsonAlias("objectId")
    private final String dealId;
    private final JSONObject properties;  // TODO we shouldn't need this.  Fix.
  }

我似乎不知道问题出在哪里。我想在这个问题上得到一些帮助。也许我遗漏了一些注释?我希望其他人也经历过这个问题。我只是在网上搜索,没有找到任何关于它的信息

我在项目根目录的lombok.config中添加了以下行:

lombok.anyConstructor.addConstructorProperties=true
然后,使用@JsonIgnoreProperties注释,使用此DTO对JSON进行反序列化:

@价值观 @JsonIgnorePropertiesignoreUnknown=true 公共类MyObject{ @JsonPropertyobjectId 字符串dealId; }
嗨,亚历克斯,你的答案是正确的。此外,我还想出了另一种解决方法。如果我添加一个默认构造函数并将dealId设置为null,问题似乎就解决了。然后添加另一个将dealId作为参数的构造函数,并将this.dealId添加到参数中。谢谢还有另一种方法可以减少POJO的代码,请查看!: