Skip to content

Commit 667f76c

Browse files
Addressing PR review
Signed-off-by: Sanghyeok An <[email protected]>
1 parent 585f356 commit 667f76c

File tree

1 file changed

+2
-42
lines changed
  • spring-kafka-docs/src/main/antora/modules/ROOT/pages/kafka

1 file changed

+2
-42
lines changed

spring-kafka-docs/src/main/antora/modules/ROOT/pages/kafka/headers.adoc

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -190,37 +190,6 @@ Instead, when it encounters a collection value (e.g., a `List<byte[]>`), it seri
190190
* **Producer side:** `DefaultKafkaHeaderMapper` writes the JSON bytes, while `SimpleKafkaHeaderMapper` ignore it.
191191
* **Consumer side:** the mapper exposes the header as a single value—the **last occurrence wins**; earlier duplicates are silently discarded.
192192

193-
For example, on the producer side:
194-
[source, java]
195-
----
196-
Message<String> message = MessageBuilder
197-
.withPayload("test-multi-value-header")
198-
.setHeader("test-multi-value-header", List.of("test-value1", "test-value2"))
199-
.build();
200-
201-
DefaultKafkaHeaderMapper headerMapper = new DefaultKafkaHeaderMapper();
202-
RecordHeaders mappedHeaders = new RecordHeaders();
203-
headerMapper.fromHeaders(message.getHeaders(), mappedHeaders);
204-
205-
ObjectMapper objectMapper = new ObjectMapper();
206-
RecordHeader expectedHeader = new RecordHeader("test-multi-value-header",
207-
objectMapper.writeValueAsBytes(List.of("test-value1", "test-value2")));
208-
assertThat(mappedHeaders.headers(multiValueHeader1).iterator().next()).isEqualTo(expectedHeader);
209-
----
210-
211-
For example, on the consumer side:
212-
[source, java]
213-
----
214-
RecordHeaders recordHeaders = new RecordHeaders();
215-
recordHeaders.add("test-multi-value1", new byte[] { 0, 0, 0, 1 });
216-
recordHeaders.add("test-multi-value1", new byte[] { 0, 0, 0, 2 });
217-
218-
Map<String, Object> mappedHeaders = new HashMap<>();
219-
headerMapper.toHeaders(recordHeaders, mappedHeaders);
220-
221-
assertThat(headersMapped.get("test-multi-value1")).isEqualTo(new byte[] { 0, 0, 0, 2 });
222-
----
223-
224193
Preserving each individual header requires explicit registration of patterns that designate the header as multi‑valued.
225194

226195
`DefaultKafkaHeaderMapper#setMultiValueHeaderPatterns(String... patterns)` accepts a list of patterns, which can be either wildcard expressions or exact header names.
@@ -241,18 +210,9 @@ Any header whose name matches one of the supplied patterns is
241210
* **Producer side:** written as separate Kafka headers, one per element.
242211
* **Consumer side:** collected into a `List<?>` that contains the individual header values; each element is returned to the application **after the usual deserialization or type conversion performed by the configured `HeaderMapper`.**
243212

244-
[NOTE]
245-
====
246-
Regular expressions are *not* supported; only the `*` wildcard is allowed in simple patterns—supporting direct equality and forms such as:
247-
248-
- `xxx*`
249-
- `*xxx`
250-
- `*xxx*`
251-
- `xxx*yyy`
252-
====
213+
NOTE: Regular expressions are *not* supported; only the +*+ wildcard is allowed in simple patterns—supporting direct equality and forms such as: +xxx*+, +*xxx+, +*xxx*+, +xxx*yyy+.
253214

254215
[IMPORTANT]
255216
====
256-
All elements collected under the same multi‑value header **must be of the same Java type**.
257-
Mixing, for example, `String` and `byte[]` values under a single header key is not supported and will lead to a conversion error.
217+
On the *Producer Side*, When `DefaultKafkaHeaderMapper` serializes a multi-value header, every element in that collection must be of a single Java type—mixing, for example, `String` and `byte[]` values under a single header key will lead to a conversion error.
258218
====

0 commit comments

Comments
 (0)