- 스프링 프레임워크에서는 JSON 데이터를 처리하기 위해 Jackson 라이브러리를 사용한다.
- Jackson은 자바 객체와 JSON 데이터 간의 변환을 쉽게 처리할 수 있는 강력한 라이브러리로, JSON 직렬화 및 역직렬화를 지원한다.
- 즉, Java Object를 JSON으로 변환하거나 JSON을 Java Object로 변환하는 데 사용할 수 있는 Java 라이브러리이다.
ObjectMapperJackson 라이브러리의 핵심 클래스인
ObjectMapper는 Java 객체와 JSON 간의 변환 작업을 처리합니다.
- Java 객체 → JSON: 직렬화(Serialization)
- JSON → Java 객체: 역직렬화(Deserialization)
writeValueAsString() 메서드
objectMapper.writeValueAsString(request)는 Java 객체를 JSON 문자열로 변환하는 메서드입니다.
- 입력: Java 객체 (
PostCreate)- 출력: JSON 문자열
{ "content": "내용입니다." }
Spring Boot에서는 기본적으로 Jackson이 통합되어 있어 추가 설정 없이 사용할 수 있습니다.
- Jackson 포함 위치:
spring-boot-starter-web에 Jackson 라이브러리가 포함되어 있음.- HTTP 요청/응답 변환: Spring MVC는 Jackson을 사용하여 JSON 데이터를 자동으로 직렬화/역직렬화합니다.
- 요청 JSON → Java 객체:
@RequestBody- Java 객체 → 응답 JSON:
@ResponseBody또는RestController
- 요청 데이터 준비:
ObjectMapper로 Java 객체를 JSON 문자열로 변환하여 API 요청에 사용.- Spring MVC와의 통합: JSON 요청 데이터를 자동으로 Java 객체로 변환하여 컨트롤러에서 처리.
Jackson의 기본 설정 외에도 다음과 같은 기능을 커스터마이징할 수 있습니다:
1. JSON 필드 이름 변경: @JsonProperty
public class PostCreate { @JsonProperty("title") private String title; }
@JsonIgnore@JsonIgnore private String sensitiveData;
@JsonFormat@JsonFormat(pattern = "yyyy-MM-dd") private LocalDate date;
@Test @BlogMockUser @DisplayName("글 작성 요청 시 title 값은 필수다.") void test2() throws Exception { // given: 테스트에서 사용할 데이터를 준비합니다. PostCreate request = PostCreate.builder() .content("내용입니다.") // title 값을 누락하여 필수 값 검증을 유발 .build(); // Jackson의 ObjectMapper를 사용하여 Java 객체를 JSON 문자열로 변환 String json = objectMapper.writeValueAsString(request); // expected: API 호출과 예상 결과를 검증합니다. mockMvc.perform(post("/api/posts") // HTTP POST 요청 .contentType(APPLICATION_JSON) // 요청 데이터의 타입을 JSON으로 지정 .content(json)) // JSON 데이터 전송 .andExpect(status().isBadRequest()) // HTTP 상태 코드 400 (Bad Request) 확인 .andExpect(jsonPath("$.code").value("400")) // 응답 JSON에서 code 필드 값 확인 .andExpect(jsonPath("$.message").value("잘못된 요청입니다.")) // message 필드 값 확인 .andExpect(jsonPath("$.validation.title").value("타이틀을 입력하세요.")) // validation 필드 값 확인 .andDo(print()); // 요청 및 응답 정보 출력 }
테스트 데이터 준비:
PostCreate 객체를 생성하되, 필수 값인 title을 누락하여 유효성 검증 오류를 유발합니다.ObjectMapper를 사용해 이를 JSON 문자열로 변환합니다.mockMvc를 이용한 API 테스트:
/api/posts 경로로 POST 요청을 보냅니다.application/json으로 지정합니다.응답 결과 검증:
400 (Bad Request)인지 확인합니다.code, message, validation.title) 값을 검증합니다.출력 확인:
andDo(print())를 사용해 요청 및 응답 데이터를 출력합니다.