Project
という名前のクラスにこのコードがあります:
_@Transient
public List<Release> getAllReleases() {
List<Release> releases = new ArrayList<Release>();
...
return releases;
}
_
プロジェクトオブジェクトがシリアル化されると、getAllReleases()
メソッドが呼び出され、allReleases
フィールドがシリアル化されたオブジェクトに追加されます。
メソッドの前に_@JsonIgnore
_を追加すると、同じ結果が得られます。したがって、オブジェクトをシリアル化するときにJacksonによって無視されるgetFoo()
メソッドをどのように実装できますか。
または、私は次のことができます:
_static public List<Release> getAllReleases(Project proj) {
List<Release> releases = new ArrayList<Release>();
...
return releases;
}
_
しかし、解決策は少しいように見え、ジャクソンが提供するいくつかのより単純なメカニズムが必要であると確信しています。
何か不足していますか? TIA
@JsonIgnore
アノテーションでゲッターメソッドをマークする場合、シリアル化しないでください。次に例を示します。
public class JacksonIgnore {
public static class Release {
public final String version;
public Release(String version) {
this.version = version;
}
}
public static class Project {
public final String name;
public Project(String name) {
this.name = name;
}
@JsonIgnore
public List<Release> getAllReleases() {
return Arrays.asList(new Release("r1"), new Release("r2"));
}
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new Project("test")));
}
}
出力:
{
"name" : "test"
}