当前位置: 首页 > 知识库问答 >
问题:

Map(去)序列化中的Jackson java.util.Date值

楚知
2023-03-14
@JsonProperty
private Map<String, Object> myMap;

共有1个答案

微生青青
2023-03-14

实现一个自定义反序列化程序,并将注释@jsonDeserialize(using=datedeserializer.class)添加到您的字段中。

看一下这个例子:

您的JSON-bean:

public class Foo {

    private String            name;

    @JsonProperty
    @JsonDeserialize(using = DateDeserializer.class)
    private Map<String, Object> dates;

    [...] // getter, setter, equals, hashcode
}
public class DateDeserializer extends JsonDeserializer<Map<String, Object>> {

    private TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {};

    @Override
    public Map<String, Object> deserialize(JsonParser p, DeserializationContext ctxt, Map<String, Object> target) throws IOException, JsonProcessingException {

        Map<String, Long> map = new ObjectMapper().readValue(p, typeRef);

        for(Entry<String, Long> e : map.entrySet()){

            Long value = e.getValue();
            String key = e.getKey();

            if(value instanceof Long){ // or if("date".equals(key)) ...
                target.put(key, new Date(value));
            } else {
                target.put(key, value); // leave as is
            }

        }

        return target;
    }

    @Override
    public Map<String, Object> deserialize(JsonParser paramJsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        return this.deserialize(paramJsonParser, ctxt, new HashMap<>());
    }

}
public static void main(String[] args) throws Exception {

    Foo foo1 = new Foo();
    foo1.setName("foo");
    foo1.setData(new HashMap<String, Object>(){{
        put("date",   new Date());
        put("bool",   true);
        put("string", "yeah");
    }});
    ObjectMapper mapper = new ObjectMapper();
    String jsonStr = mapper.writeValueAsString(foo1);
    System.out.println(jsonStr);
    Foo foo2 = mapper.readValue(jsonStr, Foo.class);

    System.out.println(foo2.equals(foo1));

}
 类似资料:
  • 如果发生错误,数据栏将是这样的字符串: 如果成功,数据字段将是一个对象: 我使用以下Kotlin代码对其进行反序列化: 模型定义如下: 当没有错误发生时,上面的代码工作正常。但是当错误发生时,会引发异常: 有没有办法将字段反序列化为对象或任何对象,并通过代码手动确定其类型?

  • 使用jackson-module-Scala,我尝试使用Long as键序列化和反序列化一个带有内部映射的对象,但是Jackson将键序列化为字符串,如果gnoring类中EKINED的类型,它就不会反序列化为Long。是虫子吗?我做错什么了吗? null 示例:https://github.com/angelcervera/jackson-scala-map-bug

  • 我是solr的新手,当我试图在Solr中序列化/反序列化一个Map时,我遇到了一个问题。 我在Java应用程序中使用Spring Data Solr,如下所示: 它在Solr中展平并序列化我地图,如下所示: 但是,当我运行搜索时,返回的对象始终将此字段设置为 NULL。反序列化不适用于此特定字段,看起来它无法识别键 1、键 2...作为地图的一部分。 有人知道如何使派生工作吗?我必须实现自定义转换

  • 问题内容: 我正在尝试将以下有效负载发布到基于泽西岛的Web服务中: 我的泽西岛代码: 就在Jersey打电话给我时,我停了下来,我看到 当面的 地址正好与我要查找的内容(上面的JSON中的内容)完全冲了出来。但是,我的数据元组不存在。我知道Jersey正在为 Address es 调用我的no- arg构造函数,并且它的setter也被调用了,但是我晚上仍无法解决Jersey可能会或可能不会尝试

  • 我正面临一种奇怪的行为。 Spark不能在Map[String, AvroObj]中序列化avro对象,即使我使用了avro-1.8.0,它使avro对象可序列化。 我怀疑SCHEMA$属性仍然不可序列化,但当我在闭包中单独使用AvroObj时,一切都很好。此外,我也毫无问题地广播了我的Map[String,AvroObj]。同样,我的avro对象只包含String和long。 然后,为了实现这一

  • 我正在尝试在dropwzo资源中实现一个方法,该方法将为来自JS前端(使用DataTable)的调用提供服务。 该请求的查询参数如下所示: 列[0][数据]=0 列[1][数据]=iata 该请求来自用DataTables实现的JS前端,并使用服务器端处理。有关数据表如何在此处发送请求的信息: https://datatables.net/manual/server-side 我在定义上述查询参数