I will update my version, but long story short, the following does not work

@Test
> public void foo() {
>     try (Jsonb jsonb = ....) {
>         final Person person = new Person("John Doe", LocalDate.of(1990, 1, 
> 1));
>         final String json = jsonb.toJson(person);
>         assertEquals("{\"name\":\"John Doe\",\"birthday\":\"1990-01-01\"}", 
> json);
>
>         final Person deserializedPerson = jsonb.fromJson(json, Person.class);
>         assertEquals("John Doe", deserializedPerson.name());
>         assertEquals(33, deserializedPerson.age());
>     } catch (Exception e) {
>         throw new RuntimeException(e);
>     }
> }
>
> @Builder(builderClassName = "Builder")
> public record Person (String name, LocalDate birthday) {
>     public int age() {
>         return LocalDate.now().getYear() - birthday.getYear();
>     }
> }
>
>
>
The JSON would contain 2 additional nodes

"builder":{},



> "age": 33


I've updated the MethodAccessMode to filter out methods which are not fields

if (isRecord(clazz) || Meta.getAnnotation(clazz, JohnzonRecord.class) != null) {
    readers.putAll(Stream.of(clazz.getMethods())
        .filter(it -> it.getDeclaringClass() != Object.class &&
it.getParameterCount() == 0)
        .filter(it -> clazz.getRecordComponents() == null
                ||
java.util.Arrays.stream(it.getDeclaringClass().getRecordComponents())
                      .anyMatch(rc -> rc.getName().equals(it.getName())
                                      &&
rc.getType().equals(it.getReturnType())))
        .filter(it -> !"toString".equals(it.getName()) &&
!"hashCode".equals(it.getName()))
        .filter(it -> !isIgnored(it.getName()) &&
Meta.getAnnotation(it, JohnzonAny.class) == null)
        .collect(toMap(m -> extractKey(m.getName(), m, null), it ->
new MethodReader(it, it.getGenericReturnType()))));
} else {



But again, it might be something with my project if you think it's all ok.

--
Jean-Louis Monteiro
http://twitter.com/jlouismonteiro
http://www.tomitribe.com


On Wed, Jul 2, 2025 at 2:14 PM Romain Manni-Bucau <rmannibu...@gmail.com>
wrote:

> Hi JL,
>
> No strong opinion but records are supported since day 1 by johnzon so not
> sure I get right the last part of your mail.
>
> Romain Manni-Bucau
> @rmannibucau <https://x.com/rmannibucau> | .NET Blog
> <https://dotnetbirdie.github.io/> | Blog <https://rmannibucau.github.io/>
> | Old
> Blog <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | Book
> <
> https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064
> >
>
>
> Le mer. 2 juil. 2025 à 12:51, Jean-Louis Monteiro <
> jlmonte...@tomitribe.com>
> a écrit :
>
> > Hi all,
> >
> > Anyone against bumping the java version for the main branch from 11 to 14
> > (or even 17)?
> > Currently, Java Record aren't really well managed and I don't think using
> > Java Reflection to workaround the Java version is the best design.
> >
> >
> > --
> > Jean-Louis Monteiro
> > http://twitter.com/jlouismonteiro
> > http://www.tomitribe.com
> >
>

Reply via email to