Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
cowtowncoder opened this issue Sep 21, 2016 · 3 comments
Open

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

cowtowncoder opened this issue Sep 21, 2016 · 3 comments

Comments

@cowtowncoder
Copy link
Member

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
Copy link
Member Author

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 cowtowncoder added 2.11 and removed 2.9 labels Sep 12, 2019
@cowtowncoder cowtowncoder added 2.12 and removed 2.11 labels Apr 12, 2020
@cowtowncoder cowtowncoder added 2.13 and removed 2.12 labels Oct 27, 2020
@Marcono1234
Copy link

Has this been partially solved through FasterXML/jackson-annotations#120?

@cowtowncoder
Copy link
Member Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants