From 1d767bee371e61eca6d0be4efdad7c5f0c18d508 Mon Sep 17 00:00:00 2001 From: joungmin Date: Tue, 16 Jun 2026 19:34:58 +0900 Subject: [PATCH] =?UTF-8?q?feat(util):=20JsonUtil.normalizeEvaluation=20?= =?UTF-8?q?=E2=80=94=20=ED=8F=89=EB=AC=B8=E2=86=92JSON=20=EB=9E=98?= =?UTF-8?q?=ED=95=91=20+=20300=EC=9E=90=20=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - evaluation 컬럼이 IS JSON 제약이라 평문은 {"text":"..."}로 정규화 - parseMap이 잘못된 JSON 받았을 때 빈 Map 대신 {"text":원문}으로 보존 - PipelineService/RestaurantService에서 이미 호출 중인 유틸 — 미커밋 상태였음 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 --- .../main/java/com/tasteby/util/JsonUtil.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/backend-java/src/main/java/com/tasteby/util/JsonUtil.java b/backend-java/src/main/java/com/tasteby/util/JsonUtil.java index 373afb8..8f34b69 100644 --- a/backend-java/src/main/java/com/tasteby/util/JsonUtil.java +++ b/backend-java/src/main/java/com/tasteby/util/JsonUtil.java @@ -53,7 +53,8 @@ public final class JsonUtil { try { return MAPPER.readValue(json, new TypeReference<>() {}); } catch (Exception e) { - return Collections.emptyMap(); + // Plain text or malformed JSON (e.g. Python-style single quotes) → wrap as {"text": "..."} + return Map.of("text", json.trim()); } } @@ -74,6 +75,24 @@ public final class JsonUtil { return rows.stream().map(JsonUtil::lowerKeys).collect(Collectors.toList()); } + /** + * Normalize evaluation to a valid JSON object string (e.g. {"text":"..."}). + * Plain text is wrapped, already-valid JSON is returned as-is, and text is truncated to maxLen. + */ + public static String normalizeEvaluation(String eval, int maxLen) { + if (eval == null || eval.isBlank()) return null; + String trimmed = eval.trim(); + if (trimmed.startsWith("{")) return trimmed; + if (trimmed.length() > maxLen) { + trimmed = trimmed.substring(0, maxLen); + } + return toJson(Map.of("text", trimmed)); + } + + public static String normalizeEvaluation(String eval) { + return normalizeEvaluation(eval, 300); + } + public static String toJson(Object value) { try { return MAPPER.writeValueAsString(value);