본문 바로가기

Backend/Spring | SpringBoot

JSON 포맷 추가

반응형

중간 서비스가 변경되어 JSON값의 포맷을 수정할 필요가 생겼다.

왼쪽의 응답을 오른쪽과 같이 한번 더 감싸야 하는 작업이 필요했다.

 

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;

ObjectMapper objectMapper = new ObjectMapper();
String originalJson = Json.toString(); // 기존 JSON 문자열

// "inputs"로 감싸기
String wrappedJson = objectMapper.writeValueAsString(Map.of("input", objectMapper.readTree(originalJson)));

HttpHeaders headers = new HttpHeaders();
HttpEntity<String> entity = new HttpEntity<>(wrappedJson, headers);

 

Jackson은 Spring이라면 내장이기 때문에 무난 하게 사용이 가능하다.

그래서 json형태로 다시 묶어주려고 했는데 아래와 같은 이슈가 발생했다.

No candidates found for method call Map. of("input",
objectMapper. readTree(dmpsReqJSON. toString())).

 

ObjectMapper.readTree(...)가 JsonNode 타입을 반환하는데, Map.of(...)는 JsonNode 타입을 허용하지 않기 때문 이라고 한다.

 

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;

ObjectMapper objectMapper = new ObjectMapper();
String originalJson = dmpsReqJSON.toString(); // 기존 JSON 문자열

// 기존 JSON을 JsonNode로 변환
JsonNode originalJsonNode = objectMapper.readTree(originalJson);

// 새 ObjectNode 생성 후 "input" 필드 추가
ObjectNode wrappedJsonNode = objectMapper.createObjectNode();
wrappedJsonNode.set("input", originalJsonNode);

// 최종 JSON 문자열 변환
String wrappedJson = objectMapper.writeValueAsString(wrappedJsonNode);

HttpHeaders headers = new HttpHeaders();
HttpEntity<String> entity = new HttpEntity<>(wrappedJson, headers);

 

이렇게 JsonNode로도 변환하여 사용할 수 있다.

반응형