jackson-databind
jackson-databind copied to clipboard
Add a way to specify "inject-only" with `@JacksonInject`
Currently all injectable properties also allow binding of data from input, so if there is a JSON value for property, it will override anything injected. But this may not always be what user wants; sometimes it may be preferable to only use injection (and quietly drop value from data, if any). Or possible even reverse, that is, allowing injection to optional override value, but if no injectable value given to default to value from input data.
To support this change, some other changes are needed:
- Create
JacksonInject.Value
to contain aspects (name, precedence for now, possibly more in future) - Create a new enum type for
JacksonInject
to indicate if and how input data value is to be used. - Change introspection method in
AnnotationIntrospector
to produce new value object but allow chaining with old implementations, to support some level of interoperability - Change introspectors (Guice module uses one I think; OSGi too?)
As to enum to use (JacksonInject.Input
?), perhaps:
-
Primary
: (default) if input data has property, use that, not injected value -
Secondary
: input data only used if no injected value can be found -
Never
: input data never used, only injected value
Another possible improvement could be to add another property (required
?) to indicate whether it is acceptable to not have an injectable value defined, when one is needed (which is in all cases except with Primary
, and finding actual data).
If no value is found, and injection is NOT required (required would be the default for now) null
would be injected.
Note: for 2.x light-weight solution via #1565, but need to rewrite for 3.0 to do proper checking, if (and only if) we can keep track of actual declaration location.
Has this been partially solved through https://github.com/FasterXML/jackson-annotations/issues/120?
Annotation issue can only add new properties but not actual handling (package only contains annotation declarations/definitions).