【问题标题】:jackson exception in unirest: Serialization Impossible. Can't find an ObjectMapper implementationunirest 中的杰克逊异常:无法序列化。找不到 ObjectMapper 实现
【发布时间】:2016-04-07 22:26:23
【问题描述】:
ObjectMapper mapper = new ObjectMapper();
ObjectNode object = mapper.readValue("{\"myjson\":\"string\"}", ObjectNode.class);
HttpResponse<JsonNode> postResponse = Unirest.post("")
    .header("accept", "application/json")
    .body(object)
    .asJson();

在对正文的调用上导致标题中的运行时异常。我不确定在这里做什么,我正在尝试将一个 json 字符串包装在一个 JsonNode 对象中,我认为这是通过 unirest 接口(在数据主体中)发送时的正常过程。

【问题讨论】:

    标签: json serialization jackson unirest objectmapper


    【解决方案1】:

    我认为你不能那样做。您不能将 ObjectNode 传递给 body 方法。您可以为该类型实现自定义 ObjectMapper。但我不认为这是你想要的。

    也许你可以这样做:

    .header("Content-Type", "application/json")
    .body(mapper.writeValueAsString(object))
    

    【讨论】:

      【解决方案2】:

      根据the docs需要设置ObjectMapper,例如

      Unirest.config().setObjectMapper(new JacksonObjectMapper());
      

      如果您已经根据需要配置了对象映射器,请将其传递给构造函数:

      new JacksonObjectMapper(yourObjectMapper);
      

      JacksonGson 实现的对象映射器有单独的依赖项

      【讨论】:

        【解决方案3】:

        查看HttpRequestWithBodybody实现:

        public RequestBodyEntity body(Object body) {
            ObjectMapper objectMapper = (ObjectMapper) Options.getOption(Option.OBJECT_MAPPER);
        
            if (objectMapper == null) {
                throw new RuntimeException("Serialization Impossible. Can't find an ObjectMapper implementation.");
            }
        
            return body(objectMapper.writeValue(body));
        }
        

        如果ObjectMapper 可用,似乎传递一个对象是可以的

        【讨论】:

          猜你喜欢
          • 2012-11-07
          • 2012-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 2016-12-18
          相关资源
          最近更新 更多