From ec69b3f29b88482cc1b36d54f148094bf10311ea Mon Sep 17 00:00:00 2001 From: asmhatre Date: Tue, 4 Aug 2026 17:30:43 +0000 Subject: [PATCH] Part 3: @JsonProperty and @JsonIgnore, both directions --- .../part3annotations/D01RenameAndIgnore.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/java/com/ankurm/jackson3/part3annotations/D01RenameAndIgnore.java diff --git a/src/main/java/com/ankurm/jackson3/part3annotations/D01RenameAndIgnore.java b/src/main/java/com/ankurm/jackson3/part3annotations/D01RenameAndIgnore.java new file mode 100644 index 0000000..a65bc11 --- /dev/null +++ b/src/main/java/com/ankurm/jackson3/part3annotations/D01RenameAndIgnore.java @@ -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()); + } +}