将 Object 属性反序列化为 JsonNode 的 Jackson 注解

Jackson annotation of deserialize Object property into JsonNode

提问人:user8024165 提问时间:11/17/2023 更新时间:11/17/2023 访问量:31

问:

这是一个用于调用 REST API 的 Java 模型类。属性“value”的类型是 Object,因为 json 是嵌套的。

public class request {
    public String id;
    public Object value;
}

在单元测试中,我想将属性“value”反序列化为“JsonNode”。

如何在没有自定义反序列化程序的情况下注释类?

爪哇 杰克逊

评论


答:

1赞 Alireza Nazari 11/17/2023 #1

若要在不使用自定义反序列化程序的情况下将“value”属性反序列化为 JsonNode,可以使用 Jackson 的 @JsonRawValue 注释。通过此注释,可以指示应将属性序列化和反序列化为原始 JSON 值。

您可以像这样修改请求类:

public class Request {
    public String id;

    @JsonRawValue
    public Object value;
}

评论

0赞 user8024165 11/17/2023
@JsonRawValue会中断序列化吗?如果值为 String,则不会对特殊字符进行转义。
0赞 Alireza Nazari 11/17/2023
如果值为 String 且包含特殊字符,则使用 @JsonRawValue可能会导致问题,因为特殊字符不会自动转义。
0赞 user8024165 11/17/2023 #2

我找到了一个解决方法:为杰克逊提供一个 setter 方法

@Data
@NoArgsConstructor
public class Request {
    
    private String id;
    private Object value;
    
    @JsonProperty("value")
    public void setJsonNodeToValue(JsonNode n) {
        value = n;
    }
    
}