首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fasterxml Jackson数据库MismatchedInputException

Fasterxml Jackson数据库MismatchedInputException
EN

Stack Overflow用户
提问于 2020-04-17 13:39:15
回答 1查看 2.4K关注 0票数 0

我在春季引导应用程序中使用com.fasterxml.jackson.databind。当我向端点发送请求时,我会收到以下异常:

代码语言:javascript
复制
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?

我的控制器处理具有以下结构的请求主体:

代码语言:javascript
复制
{
  "portalId": 123,
  "objectType": "TYPE",
  "objectTypeId": "0-3",
  "objectId": 123,
  "properties": { ... }
}

我需要的唯一属性是objectId。我构造了一个类来处理这个对象,如下所示:

代码语言:javascript
复制
@lombok.Value
private static class MyObject {
  @JsonAlias("objectId")
  private final String dealId;
} 

我设计了一个看起来像这样的控制器

代码语言:javascript
复制
@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更改为以下结构,我的请求就会处理得很好:

代码语言:javascript
复制
@lombok.Value
  private static class MyObject {
    @JsonAlias("objectId")
    private final String dealId;
    private final JSONObject properties;  // TODO we shouldn't need this.  Fix.
  }

我似乎搞不清是什么问题。我希望在这个问题上有所帮助。也许有注释说我错过了?我希望其他人也经历过这个问题。我只是在网上搜索,还没有找到任何信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-17 14:26:32

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

代码语言:javascript
复制
lombok.anyConstructor.addConstructorProperties=true

之后,使用@JsonIgnoreProperties注释使用这个DTO反序列化您的JSON:

代码语言:javascript
复制
@Value
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject {
    @JsonProperty("objectId")
    String dealId;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61273031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档