> On May 16, 2022, at 11:29 PM, Romain Manni-Bucau <[email protected]> > wrote: > > Strictly speaking - not saying we can't change it - it was the intent. > Rational (keep in mind originally point was that converter (string) were > always sufficient but jsonb made it complicated) was that binding null - > JsonValue.NULL, too big data, java out of bound value, .... - is ok but > serializing something in an object as null was a bug (lost of data).
Yeah, I struggled with that one and couldn't quite reach a confident opinion as I can see it both ways. The thought that leads me to think it is not a bug is that there are no scenarios where we see a null in a json document and pass that in and say 'convert/adapt this" As well if you wanted null to be written, you could set the pre-converted value to be null. Then I think through scenarios where it might be hard/impractical/impossible to actually go through and null out properties in the object tree so null shows up in the json. Any final field would pose a challenge as would poking out null values from a large array or immutable collection. Even if the thing wasn't final, I'd probably still be mad I had to "pay twice" by walking the object tree, evaluate all my convertable/adaptable fields before serialization only to have to evaluate them all again during serialization. > > Now where it gets complicated: > > 1. Spec - jsonb - is ambiguous even if yasson supports null both ways I didn't check yasson. > 2. We cant break users by default (means a JsonbConfig toggle, default > being backward compat I'd say) if we want to support it > > Hope it helps a bit Sort of. Maybe the best approach then is to add that flag and then improve the NullPointerException so it says "set this property if you want to return null ... blah blah blah" Then users would see the solution in their exception. Another thought which just occurred to me is what if we had an annotation that could be put on the converter/adapter? If we get a null, we check for the annotation. If we find it we allow the null, if not we default to throwing an exception. Thinking out loud. -David
smime.p7s
Description: S/MIME cryptographic signature
