> MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS Yes, I played with that also but encountered another issue. I'll open a dedicated thread!
On Tuesday, May 19, 2020 at 9:21:26 PM UTC+2, Tatu Saloranta wrote: > > On Tue, May 19, 2020 at 7:52 AM Clément Poulain <[email protected] > <javascript:>> wrote: > > > > I have edited the gist to simplify it by using an simple Integer field > instead of my own bucket object. > > > > The corresponding output is now: > > > > 1. {"myInt":42,"myInteger":42} > > 2. myInt: 42, myInteger: 100 > > 3. {"myInt":100,"myInteger":100} > > Interesting. I'll run to see what I can see on my end but in the > meantime, I'll mention that there is > > MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS > > which defaults to enabled; but disabling of which will prevent use of > final fields. > Use of final fields was originally an oversight (no check was done to > see if a visible field is final or not), > and its functioning really depends on how JVM handles it -- my > understanding is that it's sort of a quirk to > allow JDK's own Serialization mechanism (java.io.Serializable) > deserialization otherwise immutable objects, > and that there is some window of opportunity during which such changes > are allowed. And probably there is > also question of visibility of changes, such that in your case changes > are not immediately visible for some > reason. > > But I doubt there is much Jackson can do to change what you observe, > which is why disabling above-mentioned > MapperFeature probably makes sense (and only pass values to final > fields via `@JsonCreator`) > > -+ Tatu +- > > > > > On Tuesday, May 19, 2020 at 4:20:55 PM UTC+2, Clément Poulain wrote: > >> > >> Hi there, > >> > >> I'm experience a strange behavior when working with Jackson (v2.11.0) > when working with final fields. > >> I have a POJO with some final fields, which I want to NOT be modifiable > during deserialization. It seems to be working as expected for primitive > type, but not for objects. > >> > >> I have created this gist to demonstrate the issue: > https://gist.github.com/Plonk42/82409983a684b44df6a564acc43a7d75 > >> > >> The output of this gist is: > >> > >> 1. {"myField":42,"bucket":{"bucketField":42}} > >> 2. myField: 42, bucketField:100 > >> 3. {"myField":100,"bucket":{"bucketField":100}} > >> > >> On line 1., the output is what we expect (both fields set to 42). > >> Then I'm de-serializing a JSON payload representing a POJO, and we see > the first strange thing: "myField" is not modified (still 42) but > "bucketField" is modified (now 100). > >> Then serializing again the resulting POJO, it gets even stranger: now > both fields are set to 100. > >> > >> Am I missing something?? > >> > >> Thanks, > >> Clément > > > > -- > > You received this message because you are subscribed to the Google > Groups "jackson-user" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] <javascript:>. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/jackson-user/e183668f-4309-42a9-ad06-ca54848a40e2%40googlegroups.com. > > > -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/7b566b2e-b3ec-419f-92de-d7b80ca43f36%40googlegroups.com.
