Naman Naman - 1 year ago 145
JSON Question

Why jackson is serializing transient member also?

I am serializing a POJO into JSON using Jackson 2.1.4 but I want to ignore a particular field from getting serialized. I used transient but still it is serializing that element.

public class TestElement {

int x;

private transient String y;

public int getX() {
return x;

public void setX(int x) {
this.x = x;

public String getY() {
return y;

public void setY(String y) {
this.y = y;

I am serializing as following:

public static void main(String[] args) throws JsonProcessingException {
TestElement testElement = new TestElement();
ObjectMapper om = new ObjectMapper();
String serialized = om.writeValueAsString(testElement);

Please don't suggest
as I don't want to tie my model to jackson specific annotations. Can it be done using transient only? Is there any API on objectmapper for visibility settings?

Answer Source

The reason Jackson serializes the transient member is because the getters are used to determine what to serialize, not the member itslef - and since y has a public getter, that gets serialized. If you want to change that default and have Jackson use fields - simply do:


Another way to ignore a property on serialization is to do it directly on the class:

@JsonIgnoreProperties(value = { "y" })
public class TestElement {

And another way is directly on the field:

public class TestElement {

    private String y;

Hope this helps.