Ответ
В Spring Framework есть несколько основных подходов для динамического типа тела ответа:
-
ResponseEntity<?>илиResponseEntity<Object>— наиболее гибкий и рекомендуемый способ. Позволяет вернуть любой объект с контролем над статусом и заголовками.@GetMapping("/data") public ResponseEntity<?> getDynamicData() { Object data = service.getData(); // Может быть String, List, Map, DTO return ResponseEntity.ok(data); } -
Прямое возвращение
Object— Spring автоматически сериализует возвращаемое значение в тело ответа.@GetMapping("/unknown") public Object getUnknown() { return someCondition ? "String" : List.of(1, 2, 3); } -
Использование
Map<String, Object>— полезно для структурированных ответов с произвольными полями.@GetMapping("/info") public Map<String, Object> getInfo() { Map<String, Object> response = new HashMap<>(); response.put("status", "success"); response.put("data", anyObject); return response; } -
JsonNode(Jackson) — если требуется работать непосредственно с деревом JSON.@GetMapping("/json") public JsonNode getJson() { return objectMapper.valueToTree(anyObject); }