有啥方法可以防止杰克逊中的字段反序列化?

Posted

技术标签:

【中文标题】有啥方法可以防止杰克逊中的字段反序列化?【英文标题】:Is there any way to prevent field from deserialization in jackson?有什么方法可以防止杰克逊中的字段反序列化? 【发布时间】:2015-01-29 03:00:02 【问题描述】:

有什么方法可以防止杰克逊中的字段反序列化? 但我需要序列化该字段 我尝试使用@jsonIgnoreProperties 这可以防止序列化和反序列化。

【问题讨论】:

【参考方案1】:

从Jackson 2.6 开始,可以将属性标记为只读或只写。这比破解两个访问器上的注释并将所有信息保存在一个地方更简单:

public class NoDeserialization 
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private String prop;

    public String getProp() 
        return prop;
    

    public void setProp(String prop) 
        this.prop = prop;
    

【讨论】:

【参考方案2】:

“诀窍”是在 setter 和 getter 上结合 @JsonProperty 和 @JsonIgnore,如下例所示

 public class SerializeDemo

      @JsonIgnore
      private String serializeOnly;


      @JsonProperty("serializeOnly")
      public String getSerializeOnly() 
        return serializeOnly;
      

      @JsonIgnore
      public void setSerializeOnly(String serializeOnly) 
        this.serializeOnly= serializeOnly;
      
    

【讨论】:

谢谢。会尝试让您知道。 是的。它确实做到了“The Trick”。非常感谢 现在我们还有另一个问题。我们不能在 setter 和属性中都使用 @JsonIgnore。我们的 spring web 项目给出了以下异常。 org.springframework.data.mapping.model.MappingException:不明确的映射!在字段 yyyyyy 上配置的注释 JsonIgnore 及其在类 XXXXXEntity 中的访问器方法之一!有什么想法吗?? 从 Jackson 2.6 开始 @JsonProperty(access = JsonProperty.Access.READ_ONLY) 应该可以,见 Frank Pavageau's answer【参考方案3】:

您可以使用@JsonIgnore om 字段声明。

例如。

@JsonIgnore
private Integer fieldToPrevent; // this will be avoided

private Integer regularField; // will serialize

看here's的解释。

I have gave same answer here also.

【讨论】:

以上是关于有啥方法可以防止杰克逊中的字段反序列化?的主要内容,如果未能解决你的问题,请参考以下文章

杰克逊从JSON中的变量类型反序列化

为日期反序列化设置杰克逊时区

ZonedDateTime 的杰克逊反序列化问题

当我尝试反序列化对象列表时,杰克逊抛出错误映射异常

我如何反序列化以杰克逊为单位的时间戳?

杰克逊将单个项目反序列化为列表