From f1fca2e339eb5ee1b39adcf7639fd6c0bf6c258d Mon Sep 17 00:00:00 2001 From: asmhatre Date: Tue, 4 Aug 2026 17:30:04 +0000 Subject: [PATCH] Part 2: records need no module, annotation or -parameters flag --- .../part2modernjava/C01RecordRoundTrip.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/com/ankurm/jackson3/part2modernjava/C01RecordRoundTrip.java diff --git a/src/main/java/com/ankurm/jackson3/part2modernjava/C01RecordRoundTrip.java b/src/main/java/com/ankurm/jackson3/part2modernjava/C01RecordRoundTrip.java new file mode 100644 index 0000000..97ecf1c --- /dev/null +++ b/src/main/java/com/ankurm/jackson3/part2modernjava/C01RecordRoundTrip.java @@ -0,0 +1,36 @@ +package com.ankurm.jackson3.part2modernjava; + +import tools.jackson.databind.json.JsonMapper; + +/** + * Post: Jackson with Records, Optionals, Sealed Classes + * https://ankurm.com/jackson-java-records-optionals/ + * Section: "Jackson with Java Records" + * + * Records need no module, no annotation and no -parameters compiler flag in + * Jackson 3. Check the pom: there is no jackson-module-parameter-names dependency + * and no . + */ +public class C01RecordRoundTrip { + + /** A concise, immutable data transfer object. */ + public record ProductRecord(Long productId, String productName, double unitPrice) { } + + public static void main(String[] args) { + JsonMapper mapper = JsonMapper.builder().build(); + + // Serialise: Record -> JSON. Accessor methods replace getters. + ProductRecord product = new ProductRecord(101L, "Wireless Keyboard", 49.99); + String jsonOutput = mapper.writeValueAsString(product); + System.out.println(jsonOutput); + + // Deserialise: JSON -> Record. The canonical constructor is located through + // the RecordComponent reflection API (Java 16+), not through parameter names. + String json = "{\"productId\":101,\"productName\":\"Wireless Keyboard\",\"unitPrice\":49.99}"; + ProductRecord restored = mapper.readValue(json, ProductRecord.class); + System.out.println(restored.productName()); + + // Records also give you equals() for free, so a round-trip is assertable. + System.out.println("round-trip equal: " + product.equals(restored)); + } +}