μλ νμΈμ, μ΅κ·Ό ν΄λΌμ΄μΈνΈ(Vue) μ μλ²(Spring Boot) μ°λ μ μλ²μμ νκΈ λ°μ΄ν°λ₯Ό μ λ¬νλ©΄ ν΄λΌμ΄μΈνΈμμ νκΈμ΄ κΉ¨μ§λ μ΄μκ° λ°μνμλλ°μ, μ΄μ κ΄λ ¨νμ¬ κ°λ΅ν μ λ¦¬ν΄ λ³΄μμ΅λλ€.
μμΈ
HttpMessageConverter μΈν°νμ΄μ€λ Springμμ HTTP request, response λ₯Ό λ³νν΄ μ£Όλ μΈν°νμ΄μ€μΈλ°μ, ν΄λΉ ν¬μ€ν μ μ΄ν΄νλλ° νμν λ΄μ©μ΄λΌ κ°λ΅νκ²λ§ μ€λͺ νκ³ λμ΄κ°κ² μ΅λλ€.
μ€νλ§μμ νν μ¬μ©νλ @RestController μ΄λ Έν μ΄μ μ ν¬ν¨λμ΄ μλ @ResponseBody μ΄λ Έν μ΄μ μ μ¬μ©ν κ²½μ°, HttpMessageConverter μ΄ λμνκ³ λ°ν νμ μ λ°λΌ μ μ ν ꡬνμ²΄κ° μ¬μ©μ΄ λ©λλ€.
λνμ μΌλ‘λ ByteArrayHttpMessageConverter, StringHttpMessageConverter, MappingJackson2HttpMessageConveter λ±λ±μ ꡬνμ²΄κ° μ‘΄μ¬ν©λλ€.
νμ¬ νλ‘μ νΈμμ Spring Securityλ₯Ό μ¬μ©νκ³ μκ³ , μΈμ¦μ΄ μ±κ³΅ν κ²½μ°μ μ€ν¨ν κ²½μ°μ μΈν°νμ΄μ€μΈ AuthenticationSuccessHandler, AuthenticationFailureHandler λ₯Ό ꡬνν ꡬν체μ λλ΅μ μΈ μ½λλ λ€μκ³Ό κ°μ΅λλ€.
μ μ½λ μ€ ~Success, ~Failure λ©μλμμλ response.getWriter().write() λ©μλμ νλΌλ―Έν°μλ String νμ μ΄ λ€μ΄κ°λλ°μ,
λ°λΌμ HttpMessageConverter μΈν°νμ΄μ€μ ꡬνμ²΄μΈ StringHttpMessageConverter ν΄λμ€κ° λμνκ² λ©λλ€.
ν΄λΉ ν΄λμ€μμ κΈ°λ³Έ Charset μ΄ ISO-8859-1 λ‘ μ€μ λμ΄ μκΈ° λλ¬Έμ, λ°λ‘ μ€μ ν΄ μ£Όμ§ μμΌλ©΄ ν΄λΌμ΄μΈνΈμμλ μ λ¬λ°μ νκΈμ΄ κΉ¨μ§λ λ¬Έμ κ° λ°μνκ² λ©λλ€.
ν μ€νΈν΄λ³΄λ©΄ ν΄λΌμ΄μΈνΈμμλ μλμ²λΌ νκΈμ΄ κΉ¨μ Έμ λμ€κ² λ©λλ€.
λ€νΈμν¬ νμμλ νμΈν΄λ³΄λ©΄ μλ΅ ν€λμ Content-Type μ charset μ΄ ISO-8859-1 μ λλ€.
ν΄κ²°μ±
λ λ§μ λ°©λ²μ΄ μ‘΄μ¬ν μ μκ² μ§λ§, μ κ° μ°Ύμ λ°©λ²μ ν¬κ² 3κ°μ§ μ λ μ‘΄μ¬ν κ² κ°μμ.
1. properties(yml) νμΌμ server μ μΈμ½λ©μ κ°μ λ‘ UTF-8 λ‘ μ€μ νκΈ°
server:
servlet:
encoding:
force-response: true
charset: UTF-8
2. AuthenticationSuccessHandler, AuthenticationFailureHandler μΈν°νμ΄μ€μ ꡬν체μμ μΈμ½λ© μ€μ νκΈ°
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException exception) throws IOException {
...
// μΈμ½λ© μ€μ
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
...
}
3. WebMvcConfigurer μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
converter.setDefaultCharset(StandardCharsets.UTF_8);
converters.add(converter);
// HTTP Response μμ JSON λ³νλ νμν κ²½μ° μΆκ°
converters.add(new MappingJackson2HttpMessageConverter());
}
}
μ λ°©λ² μ€ νλλ‘ μ€μ νλ©΄ ν΄κ²°μ΄ λλλ°μ, μ λ 2λ² λ°©μμΌλ‘ μ μ©μ νμ΅λλ€.
1λ²μ κ²½μ°, μ μμΌλ‘ μ€μ νκΈ°μ νΉμ λͺ¨λ₯Ό λ¬Έμ κ° μ‘΄μ¬ν μ μμ κ² κ°μκ³ ,
3λ²μ κ²½μ° Config ν΄λμ€λ₯Ό κ΅³μ΄ λ§λ€ νμλ μλ€κ³ μκ°νμ΅λλ€.
ν μ€νΈ ν΄λ³΄λ©΄ μλμ κ°μ΄ νκΈμ΄ μκΉ¨μ§κ³ , Content-Type μ charsetλ μ μμ μΌλ‘ UTF-8λ‘ λμ€λ κ²μ νμΈν μ μμ΅λλ€.
λκΈ