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

Jackson反序列化器如何在考虑@JSONFORMAT注释的情况下对字段进行递归反序列化?

单昊穹
2023-03-14

在实体的自定义反序列化器中,我希望以一种尊重@JSONFORMAT注释的方式递归调用(部分)字段的反序列化。更具体地说,这就是反序列化器的样子:

public class DealPatchDeserializer extends JsonDeserializer<DealPatch> {
    public DealPatch deserialize(JsonParser p, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {
        JsonNode root = p.readValueAsTree();
        JsonNode redeemableFromNode = root.path("redeemableFrom");
        JsonParser redeemableFromParser = redeemableFromNode.traverse(p.getCodec());
        Date date = redeemableFromParser.readValueAs(Date.class);
}

在该示例中,jsonParser.readValueAs()不接受带注释的

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy")
private Date redeemableTo;

是否有任何方法可以反序列化对象的字段,使其尊重注释格式?

共有1个答案

商骞仕
2023-03-14

如果整个redeemablefrom对象不需要自定义反序列化,则可以通过调用treeToValue()将其解析为常规Java对象,并附带注释。类似这样的事情应该会起作用:

p.getCodec().treeToValue(redeemableFromNode, RedeemableFrom.class);
 类似资料:
  • 我一直在阅读关于Jackson XML反序列化的教程(#1,#2)。我试图通过编写一些java代码来遵循示例: 根据教程,这将产生以下输出: 但是,它会导致以下错误输出: 属性顺序不正确,“id”字段包含不正确的XML元素,“note”字段包含不正确。据说,各种java注释应该会改变Jackson的行为,但似乎所有注释都被忽略了。有人知道这是为什么吗? 这是jackson xml databind

  • 问题内容: 我需要以一种特定的方式配置Jackson,以下将对其进行描述。 带注释的字段仅使用其ID进行序列化: 如果该字段是普通对象,请对其序列化 如果该字段是对象的集合,请序列化一个数组 带注释的字段的属性名称以不同的顺序进行序列化: 如果该字段是普通对象,请在属性名称后添加后缀 如果该字段是对象的集合,请在属性名称后添加后缀 对于注释,我想这样的自定义,最好有一个可选的值来覆盖名字就像做 用

  • 问题内容: 我正在杰克逊1.6.2中使用REST Web服务/ ApacheWink。我如何注释枚举字段,以便Jackson对其进行反序列化? 内部阶层 Jackson的文档指出可以通过@JsonValue/来做到这一点,@JsonCreator但没有提供示例。 是否有人愿意像往常一样洒(java)bean? 问题答案: 如果您使用的是Jackson 1.9,则可以通过以下方式完成序列化: 因此,

  • 来自REST服务的json对象 使用JacksonInFiveMinutes中的代码 ObjectMapper mapper=new ObjectMapper(); Map userData=mapper.read值(webResource.queryParams(queryParams). get(String.class);, Map.class); 在哪里: 从REST服务返回json 从J

  • 我有这样一门课: 我知道基于typeToClassId的对象obj是什么类型,不幸的是只有在运行时才知道。 我想基于typeToClassId解析出obj——这里最好的方法是什么?注释似乎已经过时了,基于ObjectMapper的东西似乎是对的,但我很难弄清楚最好的方法可能是什么。 类似于类clazz=lookUpClassBasedOnId(typeToClassId)objectMapper的

  • 如果一封邮件被发送到我的收件箱,我会收到一条消息,并将内容插入数据库。我有一个组织。springframework。整合。果心信息如下: 现在,如果出现故障,我希望有故障安全恢复机制,我想的是将消息对象序列化到一个文件中,然后反序列化并更新到DB。 问题1。在这种情况下,如何序列化消息对象?2。除了序列化,还可以使用其他机制吗? 编辑我以前没有做过序列化,我听说类应该实现Serializable,