1
0

Part 3: @JsonProperty and @JsonIgnore, both directions

This commit is contained in:
2026-08-04 17:30:43 +00:00
parent cab6dae3b3
commit ec69b3f29b

View File

@@ -0,0 +1,44 @@
package com.ankurm.jackson3.part3annotations;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import tools.jackson.databind.json.JsonMapper;
/**
* Post: Jackson Annotations Cheat Sheet — https://ankurm.com/jackson-annotations-guide/
* Sections: "@JsonProperty" and "@JsonIgnore"
*
* Every @Json* annotation is imported from com.fasterxml.jackson.annotation, even
* on Jackson 3. jackson-annotations deliberately keeps the old group ID and package
* so one copy can be shared by Jackson 2 and Jackson 3 code on the same classpath.
*/
public class D01RenameAndIgnore {
public record OrderSummary(
@JsonProperty("order_id") Long orderId,
@JsonProperty("customer_name") String customerName) { }
public record UserAccount(
String username,
@JsonIgnore String passwordHash) { }
public static void main(String[] args) {
JsonMapper mapper = JsonMapper.builder().build();
System.out.println("rename : "
+ mapper.writeValueAsString(new OrderSummary(1001L, "Alice")));
// Deserialisation honours the renamed key in both directions.
OrderSummary back = mapper.readValue(
"{\"order_id\":1001,\"customer_name\":\"Alice\"}", OrderSummary.class);
System.out.println("read back : " + back);
System.out.println("ignore : "
+ mapper.writeValueAsString(new UserAccount("alice", "$2a$10$secret")));
// @JsonIgnore is bidirectional: the field is not read from JSON either.
UserAccount ignored = mapper.readValue(
"{\"username\":\"alice\",\"passwordHash\":\"injected\"}", UserAccount.class);
System.out.println("read back : passwordHash=" + ignored.passwordHash());
}
}