Reputation: 9552
I'm using the Jackson library.
I want to ignore a specific field when serializing/deserializing, so for example:
public static class Foo {
public String foo = "a";
public String bar = "b";
@JsonIgnore
public String foobar = "c";
}
Should give me:
{
foo: "a",
bar: "b",
}
But I'm getting:
{
foo: "a",
bar: "b",
foobar: "c"
}
I'm serializing the object with this code:
ObjectMapper mapper = new ObjectMapper();
String out = mapper.writeValueAsString(new Foo());
The real type of the field on my class is an instance of the Log4J Logger class. What am I doing wrong?
Upvotes: 63
Views: 68086
Reputation: 1
try to ignore the get method, and use the set method. e.g.
@JsonIgnore
public String getPassword() {
return _password;
}
@JsonProperty(JSON.PASSWORD)
public void setPassword(String value) {
_password = value;
}
Worked in my test case.
The idea is the deserializer can write the value, but the serializer should not see the value.
Upvotes: 0
Reputation: 179
Reference from How can I tell jackson to ignore a property for which I don't have control over the source code?
You can use Jackson Mixins. For example:
class YourClass {
public int ignoreThis() { return 0; }
}
With this Mixin
abstract class MixIn {
@JsonIgnore abstract int ignoreThis(); // we don't need it!
}
With this:
objectMapper.addMixIn(YourClass.class, MixIn.class);
Upvotes: 0
Reputation: 371
Also worth noting is this solution using DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES: https://stackoverflow.com/a/18850479/1256179
Upvotes: 1
Reputation: 9552
Ok, so for some reason I missed this answer.
The following code works as expected:
@JsonIgnoreProperties({"foobar"})
public static class Foo {
public String foo = "a";
public String bar = "b";
public String foobar = "c";
}
//Test code
ObjectMapper mapper = new ObjectMapper();
Foo foo = new Foo();
foo.foobar = "foobar";
foo.foo = "Foo";
String out = mapper.writeValueAsString(foo);
Foo f = mapper.readValue(out, Foo.class);
Upvotes: 92