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

JsonIgnore和JsonProperty的行为不符合我的预期

滑骞尧
2023-03-14
  @JsonSerialize(include = Inclusion.NON_NULL)
public static class Manifest {

  public Manifest(){
    this.files = new ArrayList<String>();
  }

  @JsonProperty("manifest-version")
  private String manifestVersion;

  private ArrayList<String> files; 

  @JsonIgnore
  public String getManifestVersion() {
    return manifestVersion;
  }

  @JsonIgnore
  public void setManifestVersion(String manifestVersion) {
    this.manifestVersion = manifestVersion;
  }

  public ArrayList<String> getFiles() {
    return files;
  }

  public void setFiles(ArrayList<String> files) {
    this.files = files;
  }
  public void addFile(String file) {
    this.files.add(file);
  }

}

共有1个答案

汪和悌
2023-03-14

我尝试用Jackson2.2执行您的代码,得到了预期的输出

import java.util.ArrayList;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion;

public class Test {

  @JsonSerialize(include = Inclusion.NON_NULL)
  public static class Manifest {

    public Manifest(){
      this.files = new ArrayList<String>();
    }

    @JsonProperty("manifest-version")
    private String manifestVersion;

    private ArrayList<String> files; 

    @JsonIgnore
    public String getManifestVersion() {
      return manifestVersion;
    }

    @JsonIgnore
    public void setManifestVersion(String manifestVersion) {
      this.manifestVersion = manifestVersion;
    }

    public ArrayList<String> getFiles() {
      return files;
    }

    public void setFiles(ArrayList<String> files) {
      this.files = files;
    }
    public void addFile(String file) {
      this.files.add(file);
    }

  }

  public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper obj = new ObjectMapper();
        Manifest m = new Manifest();
        m.setManifestVersion("2.0");
        System.out.println(obj.writeValueAsString(m));      
    }
}

输出:{“files”:[],“manifest-version”:“2.0”}

你用的是什么版本的杰克逊?

 类似资料:
  • 在实用服务中,我有两个功能foo和bar。js 在我的测试文件中,我导入了实用ervice.js并窥探了条形图函数。我期望调用间谍计数为1,因为foo被称为,但它是0。如果我错过了什么,请建议。

  • 我正试图实现一个全屏幕响应的图像解决方案,具有以下松散的要求 0-600像素 经过一点挖掘,我决定使用尺寸: iPhone 6 我为每个屏幕大小创建了单独的图像(用于艺术方向),并使用了以下srcset代码 图像具有以下CSS(因此它的行为类似于背景:封面) 我把我的桌面显示器的尺寸调整得很小,并调整到全屏,图像被替换到正确的位置 然而,在我的手机和平板电脑上,它始终显示1920年的图像 理想情况

  • 使用4.0.31,我的AppHost配置方法是这样声明的: 我的印象是,这将把swagger用户界面的url设置为.../api/Resources的https版本,但是我仍然在swagger URL文本框中获得常规的超文本传输协议endpoint,例如: 我们的web服务器位于执行SSL卸载(并需要SSL)的负载平衡器之后,因此URL应为: 一个积极的方面是,使用“UseHttpsLinks”实

  • 在处理一个项目时,我犯了一个错误,将@jsonIgnore放在setter而不是getter属性上,如下所示 这是@jsonIgnore正常工作的方式吗?我以为只在getter上设置@jsonignore可以防止序列化。在这里,它阻止了序列化,即使我把它放在getter或setter上。 感谢任何建议。多谢了。

  • 问题内容: 我有一个我重写了hashCode方法和equals方法的类。equals方法的行为符合我的预期,但是hashCode方法的行为似乎不符合我的预期。因此,我假设我的期望是不正确的,但不确定原因。下面是重写的方法: 现在,我有一个测试类,其中创建两个car对象,并调用equals方法,然后将car的每个实例放入HashMap中。我将每个实例设置为具有相同的汽车名称和模型,并调用equals

  • 我有一个选择一个图像的意图(我在一个片段中这样称呼它): 在我的活动中: 输出:OnActivityResult:请求代码:66084 OnActivityResult:Result:-1成功=true 正如您所看到的,结果是成功的,但请求代码发生了更改。所以我无法查证是什么请求。