fix(ocr): handle unknown NDJSON fields with @JsonIgnoreProperties

Added @JsonIgnoreProperties(ignoreUnknown = true) to OcrBlockResult so
new fields from the Python OCR service don't crash the Java parser,
while keeping FAIL_ON_UNKNOWN_PROPERTIES strict globally.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-13 12:27:20 +02:00
parent caae2ead81
commit 9282e46a02
2 changed files with 20 additions and 0 deletions

View File

@@ -1,7 +1,10 @@
package org.raddatz.familienarchiv.service;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public record OcrBlockResult(
int pageNumber,
double x,

View File

@@ -98,6 +98,23 @@ class RestClientOcrClientStreamTest {
assertThat(events).hasSize(2);
}
@Test
void parseNdjsonStream_handlesUnknownFieldsInBlocks() {
String ndjson = """
{"type":"start","totalPages":1}
{"type":"page","pageNumber":0,"blocks":[{"pageNumber":0,"x":0.1,"y":0.2,"width":0.8,"height":0.1,"polygon":null,"text":"Line 1","confidence":0.95,"newFutureField":"ignored"}]}
{"type":"done","totalBlocks":1,"skippedPages":0}
""";
InputStream stream = new ByteArrayInputStream(ndjson.getBytes(StandardCharsets.UTF_8));
List<OcrStreamEvent> events = new ArrayList<>();
RestClientOcrClient.parseNdjsonStream(stream, events::add);
assertThat(events).hasSize(3);
var page = (OcrStreamEvent.Page) events.get(1);
assertThat(page.blocks().get(0).text()).isEqualTo("Line 1");
}
@Test
void parseNdjsonStream_parsesPageWithPolygon() {
String ndjson = """