我有一个简单的类,我想使用Jackson将其反序列化为JSON。我想在我的JSON中逻辑重命名一个字段,另一个我希望与我的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属性(但是应该为manifest-version创建一个JSON属性,我已经定义了@JsonProperty。
预期产量是 { “manifest-version”:“2.0” } 实际输出是 { “manifest-version”:“2.0”, “manifestVersion”: “2.0” }
任何帮助都将不胜感激。
答案 0 :(得分: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”}
你使用的是哪个版本的杰克逊?