diff --git a/reactor-core/src/main/java/reactor/util/context/ReactorContextAccessor.java b/reactor-core/src/main/java/reactor/util/context/ReactorContextAccessor.java index 370e3b0e09..29d86e6a93 100644 --- a/reactor-core/src/main/java/reactor/util/context/ReactorContextAccessor.java +++ b/reactor-core/src/main/java/reactor/util/context/ReactorContextAccessor.java @@ -21,6 +21,8 @@ import io.micrometer.context.ContextAccessor; +import reactor.util.annotation.Nullable; + /** * A {@code ContextAccessor} to enable reading values from a Reactor * {@link ContextView} and writing values to {@link Context}. @@ -48,6 +50,12 @@ public void readValues(ContextView source, Predicate keyPredicate, Map T readValue(ContextView sourceContext, Object key) { + return sourceContext.getOrDefault(key, null); + } + @Override public boolean canWriteTo(Class contextType) { return Context.class.isAssignableFrom(contextType); diff --git a/reactor-core/src/withMicrometerTest/java/reactor/util/context/ReactorContextAccessorTest.java b/reactor-core/src/withMicrometerTest/java/reactor/util/context/ReactorContextAccessorTest.java index d7f23492ad..eafbdfe6fc 100644 --- a/reactor-core/src/withMicrometerTest/java/reactor/util/context/ReactorContextAccessorTest.java +++ b/reactor-core/src/withMicrometerTest/java/reactor/util/context/ReactorContextAccessorTest.java @@ -104,4 +104,23 @@ void writeValuesWithPutAllMap() { Mockito.verify(target, never()).putAll((ContextView) any()); Mockito.verify(target, times(1)).putAllMap(anyMap()); } + + @Test + void readValueWhenKeyPresent() { + ReactorContextAccessor test = new ReactorContextAccessor(); + String expectedValue = "A"; + ContextView source = Context.of(1, expectedValue, 2, "B"); + + String readValue = test.readValue(source, 1); + assertThat(readValue).isSameAs(expectedValue); + } + + @Test + void readValueReturnsNullWhenKeyAbsent() { + ReactorContextAccessor test = new ReactorContextAccessor(); + ContextView source = Context.of(1, "A"); + + String readValue = test.readValue(source, 2); + assertThat(readValue).isNull(); + } }