Skip to content

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

Open
@cowtowncoder

Description

@cowtowncoder

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    2.20Issues planned at 2.20 or latermost-wantedTag to indicate that there is heavy user +1'ing action

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions