I also forget the fact that Groovy records are not always Java records when
running on older JDKs...
So it needs to make the difference with real and groovy-specific
fallthrough records.

On Tue, Sep 5, 2023 at 10:46 AM Guillaume Laforge <glafo...@gmail.com>
wrote:

> Sure, I just created:
> https://issues.apache.org/jira/browse/GROOVY-11167
>
> Also, thanks for the workaround.
> I ended up just using a POGO instead, but I hadn't thought of implementing
> a Map.
>
> I guess JsonOutput needs to be updated here
> <https://github.com/apache/groovy/blob/master/subprojects/groovy-json/src/main/java/groovy/json/DefaultJsonGenerator.java#L174>
> .
> I suppose we would add a new if case that check if the class of the object
> is a record, and the retrieve the components with
> clazz.getRecordComponents()?
>
> Guillaume
>
> On Tue, Sep 5, 2023 at 7:44 AM Paul King <pa...@asert.com.au> wrote:
>
>> We aren't picking up the metabean properties for the record correctly.
>> Would you like to file a bug report?
>>
>> Workarounds are to call "toMap()" (or *.toMap() on the list), or do
>> something like:
>> ```
>> @AutoImplement
>> record Person(String name) implements Map {
>>   Set entrySet() { toMap().entrySet() }
>> }
>> ```
>>
>>
>> <
>> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
>> >
>> Virus-free.www.avast.com
>> <
>> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
>> >
>> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>
>> On Tue, Sep 5, 2023 at 2:13 AM Guillaume Laforge <glafo...@gmail.com>
>> wrote:
>> >
>> > Hi,
>> >
>> > I was a bit surprised by this behavior with serializing records in JSON.
>> >
>> > I was expecting this assertion to pass:
>> >
>> > import groovy.json.JsonOutput
>> > record Person(String name) {}
>> > assert JsonOutput.toJson([new Person('Guillaume')]) ==
>> '[{"name":"Guillaume"}]'
>> >
>> > Instead, I got [{}]
>> >
>> > Shouldn't records be treated like POGOs and thus serialize the same way
>> like in my example above? Or is there a good reason why this is not the
>> case?
>> >
>> > Guillaume
>> >
>> > --
>> > Guillaume Laforge
>> > Apache Groovy committer
>> > Developer Advocate @ Google Cloud
>> >
>> > Blog: glaforge.dev
>> > Twitter: @glaforge
>> > Mastodon: @glafo...@uwyn.net
>>
>
>
> --
> *Guillaume Laforge*
> Apache Groovy committer
> Developer Advocate @ Google Cloud <https://cloud.google.com/>
>
>    - Blog: glaforge.dev
>    - Twitter: @glaforge <http://twitter.com/glaforge>
>    - Mastodon: @glafo...@uwyn.net <http://%40glafo...@uwyn.net/>
>
>

-- 
*Guillaume Laforge*
Apache Groovy committer
Developer Advocate @ Google Cloud <https://cloud.google.com/>

   - Blog: glaforge.dev
   - Twitter: @glaforge <http://twitter.com/glaforge>
   - Mastodon: @glafo...@uwyn.net <http://%40glafo...@uwyn.net/>

Reply via email to