SpringBoot + intelij + H2 + Junit5 + MockMvc 환경에서 Controller 통합 테스트를 진행하던 때 한글이 깨지는 현상을 해결한 경험입니다.
##Test.java파일
mockMvc.perform(get("/member/all")
.andDo(print())
.andExpect(status().isOk());
@Test
public void 상품검색() throws Exception {
String keyword = "스포츠"; // 한글 사용
MvcResult result = this.mockMvc
.perform(get("/api/search/" + keyword))
.andExpect(status().isOk())
.andExpect(어쩌구 Matcher...)
.andReturn();
위와 비슷한 방식으로 모든 데이터를 조회하는 요청을 날리는데, print할때 계속 한글이 깨지는 문제가 있었어요
System.out.println(Charset.defaultCharset().displayName());
spring.datasource.hikari.jdbc-url=jdbc:h2:mem:testdb?useUnicode=true&characterEncoding=utf8&charSet=UTF-8
@RequestMapping(value = "/myapi/sidedish", produces = MediaTypes.HAL_JSON_VALUE+";charset=UTF-8")
public class DishController {
조금더 우아한 방법 : 프로퍼티 파일에 설정 추가하기
프로퍼티의 경우
#MockMvc Encodings
server.servlet.encoding.force-response=true
야믈의 경우
# test/resources/application.yml
server:
servlet:
encoding:
force-response: true
위처럼 추가해주면, UTF-8 인코딩 포맷으로 출력됨을 알 수 있다
Response header 'Content-Type' expected:<application/hal+json> but was:<application/hal+json;charset=UTF-8>
Expected :application/hal+json
Actual :application/hal+json;charset=UTF-8
<Click to see difference>
package org.springframework.hateoas;
public class MediaTypes {
public static final String HAL_JSON_VALUE = "application/hal+json";
(중략...)