Skip to content

Commit 5705aff

Browse files
committed
feat(#1381): JacksonInject.useInput works for constructor properties as well
1 parent 191292c commit 5705aff

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/CreatorProperty.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,11 @@ public Object getInjectableValueId() {
280280
return (_injectableValue == null) ? null : _injectableValue.getId();
281281
}
282282

283+
@Override
284+
public JacksonInject.Value getInjectableValue() {
285+
return _injectableValue;
286+
}
287+
283288
@Override
284289
public boolean isInjectionOnly() {
285290
return (_injectableValue != null) && !_injectableValue.willUseInput(true);

src/main/java/com/fasterxml/jackson/databind/deser/SettableBeanProperty.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.IOException;
44
import java.lang.annotation.Annotation;
55

6+
import com.fasterxml.jackson.annotation.JacksonInject;
67
import com.fasterxml.jackson.core.*;
78
import com.fasterxml.jackson.databind.*;
89
import com.fasterxml.jackson.databind.deser.impl.FailingDeserializer;
@@ -458,6 +459,14 @@ public int getCreatorIndex() {
458459
*/
459460
public Object getInjectableValueId() { return null; }
460461

462+
/**
463+
* Accessor for injectable value, if this bean property supports
464+
* value injection.
465+
*
466+
* @since 2.20
467+
*/
468+
public JacksonInject.Value getInjectableValue() { return null; }
469+
461470
/**
462471
* Accessor for checking whether this property is injectable, and if so,
463472
* ONLY injectable (will not bind from input).

src/main/java/com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.IOException;
44
import java.util.BitSet;
55

6+
import com.fasterxml.jackson.annotation.JacksonInject;
67
import com.fasterxml.jackson.core.JsonParser;
78
import com.fasterxml.jackson.databind.*;
89
import com.fasterxml.jackson.databind.deser.SettableAnyProperty;
@@ -218,6 +219,25 @@ public Object[] getParameters(SettableBeanProperty[] props)
218219
if (_anyParamSetter != null) {
219220
_creatorParameters[_anyParamSetter.getParameterIndex()] = _createAndSetAnySetterValue();
220221
}
222+
223+
for (int ix = 0; ix < props.length; ++ix) {
224+
final SettableBeanProperty prop = props[ix];
225+
final AnnotatedMember member = prop.getMember();
226+
227+
if (member != null) {
228+
final JacksonInject.Value injectableValue = prop.getInjectableValue();
229+
230+
if (injectableValue != null && !Boolean.TRUE.equals(injectableValue.getUseInput())) {
231+
final Object injectedValue = _context.findInjectableValue(
232+
injectableValue.getId(), prop, member, injectableValue.getOptional());
233+
234+
if (injectedValue != JacksonInject.Value.empty()) {
235+
_creatorParameters[ix] = injectedValue;
236+
}
237+
}
238+
}
239+
}
240+
221241
if (_context.isEnabled(DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES)) {
222242
for (int ix = 0; ix < props.length; ++ix) {
223243
if (_creatorParameters[ix] == null) {

0 commit comments

Comments
 (0)