It is unclear how Jackson is used, since no code or description was provided in the original question.
By default, Jackson skips all transition fields during serialization.
import java.io.Serializable; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.codehaus.jackson.map.ObjectMapper; public class Foo { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY)); System.out.println(mapper.writeValueAsString(new Placement()));
However, if there is a metter for the transition field, then by default Jackson turns it on during serialization.
import java.io.Serializable; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.codehaus.jackson.map.ObjectMapper; public class Foo { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY)); System.out.println(mapper.writeValueAsString(new Placement())); // output: {"placementId":42,"type":"OK","placement":"left","fileData":{"name":"Fred"}} // transient fields with getters are not skipped by default } } class Placement implements Serializable { private static final long serialVersionUID = 1L; private long placementId = 42; private String type = "OK"; private String placement = "left"; private transient CommonsMultipartFile fileData = new CommonsMultipartFile(); public CommonsMultipartFile getFileData() {return fileData;} } class CommonsMultipartFile { private String name = "Fred"; }
One configuration option to skip the getter is to simply apply the @JsonIgnore annotation.
import java.io.Serializable; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.ObjectMapper; public class Foo { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY)); System.out.println(mapper.writeValueAsString(new Placement()));
If this is not possible or it is desirable to change the original class definition to add @JsonIgnore annotation, you can use Mix-In .
import java.io.Serializable; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.ObjectMapper; public class Foo { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY)); mapper.getSerializationConfig().addMixInAnnotations(Placement.class, SkipFileDataMixIn.class); System.out.println(mapper.writeValueAsString(new Placement()));
Another approach is to mark the type you want to skip using @JsonIgnoreType .
import java.io.Serializable; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.codehaus.jackson.annotate.JsonIgnoreType; import org.codehaus.jackson.map.ObjectMapper; public class Foo { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY)); System.out.println(mapper.writeValueAsString(new Placement()));