2

Jackson を使用して JSON に逆シリアル化したい単純なクラスがあります。JSON で論理的に 1 つのフィールドの名前を変更し、もう 1 つのフィールドの名前を Java クラスで定義されているのと同じ名前にしたいと考えています。

  @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);
  }

}

getter/setter の @JsonIgnore が manifestVersion を JSON プロパティにしないことを期待しています (ただし、@JsonProperty が定義されている manifest-version の JSON プロパティを作成する必要があります。

期待される出力は { "manifest-version" : "2.0" } 実際の出力は { "manifest-version" : "2.0", "manifestVersion":"2.0" } です

どんな助けでも大歓迎です。

4

1 に答える 1

1

Jackson 2.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"}

ジャクソンのどのバージョンを使用していますか?

于 2013-10-10T19:24:54.103 に答える