jackson-databind icon indicating copy to clipboard operation
jackson-databind copied to clipboard

Add a way to specify "inject-only" with `@JacksonInject`

Open cowtowncoder opened this issue 7 years ago • 3 comments

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:

  1. Create JacksonInject.Value to contain aspects (name, precedence for now, possibly more in future)
  2. Create a new enum type for JacksonInject to indicate if and how input data value is to be used.
  3. Change introspection method in AnnotationIntrospector to produce new value object but allow chaining with old implementations, to support some level of interoperability
  4. 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.

cowtowncoder avatar Sep 21 '16 22:09 cowtowncoder

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.

cowtowncoder avatar Apr 06 '18 03:04 cowtowncoder

Has this been partially solved through https://github.com/FasterXML/jackson-annotations/issues/120?

Marcono1234 avatar Apr 05 '21 20:04 Marcono1234

Annotation issue can only add new properties but not actual handling (package only contains annotation declarations/definitions).

cowtowncoder avatar Apr 05 '21 20:04 cowtowncoder