ObjectMapper는 JSON과 자바객체(DTO)간의 변환을 제공하는 객체이다.
ObjectMapper를 활용하여 JSON과 DTO간 변환하고 변환결과, 응답결과를 확인해보겠다.
@Pointcut 수정
Pointcut을 수정하여, api 폴더에 있는 모든 컨트롤러의 메소드를 디버깅 AOP 대상으로 적용해준다.
//DebuggingAspect.java
@Pointcut("execution(* com.example.firstproject.api.*.*(..))")
private void cut(){}
writeValueAsString(), @Getter
//import 생략
@ToString
@AllArgsConstructor
@Getter
@NoArgsConstructor
public class Burger {
private String name;
private int price;
private List<String> ingredients;
}
writeValueAsString 메소드에 예외 처리를 해준다.
Add exception to method signature.
//import 생략
class BurgerTest {
@Test
public void 자바_객체를_JSON으로_변환() throws JsonProcessingException {
//준비
ObjectMapper objectMapper = new ObjectMapper();
List<String> ingredients = Arrays.asList("고기 패티", "토마토", "소스");
Burger burger = new Burger("버거킹 와퍼",5000,ingredients);
//수행
String json = objectMapper.writeValueAsString(burger);
//예상
String expected ="{\"name\":\"버거킹 와퍼\",\"price\":5000,\"ingredients\":[\"고기 패티\",\"토마토\",\"소스\"]}";
//검증
assertEquals(expected, json);
System.out.println(json);
}
}
JsonNode란 Jackson 라이브러리에서 제공하는 객체이다.
readTree(), JsonNode, toPrettyString()
objectMapper를 사용한 JSON 생성.
//검증
assertEquals(expected, json);
JsonNode jsonNode = objectMapper.readTree(json);
System.out.println(jsonNode.toPrettyString());
readValue(), @NoArgsConstructor
readValue(JSON, JSON으로 만들 클래스 타입)
//검증
assertEquals(expected.toString(), burger.toString());
JsonNode jsonNode = objectMapper.readTree(json);
System.out.println(jsonNode.toPrettyString());
System.out.println(burger.toString());
createObjectNode(), ObjectNode, ArrayNode
@Test
public void JSON을_자바_객체로_변환() throws JsonProcessingException {
// 준비
ObjectMapper objectMapper = new ObjectMapper();
/*
{
"name" : "버거킹 와퍼",
"price" : 5000,
"ingredients" : [ "고기 패티", "양사추", "토마토", "소스" ]
}
*/
ObjectNode objectNode = objectMapper.createObjectNode();
objectNode.put("name", "버거킹 와퍼");
objectNode.put("price", 5000);
ArrayNode arrayNode = objectMapper.createArrayNode();
arrayNode.add("고기 패티");
arrayNode.add("양상추");
arrayNode.add("토마토");
arrayNode.add("소스");
objectNode.set("ingredients", arrayNode);
String json = objectNode.toString();
// 수행
Burger burger = objectMapper.readValue(json, Burger.class);
// 예상
List<String> ingredients = Arrays.asList("고기 패티", "양상추", "토마토", "소스");
Burger expected = new Burger("버거킹 와퍼", 5000, ingredients);
// 검증
assertEquals(expected.toString(), burger.toString());
JsonNode jsonNode = objectMapper.readTree(json);
System.out.println(jsonNode.toPrettyString());
System.out.println(burger.toString());
}