티스토리 뷰
반응형
URI 를 임의적으로 조작하여 한글을 넣었을 경우, 검색 결과로 400번대 에러가 떨어져야 하는데 500 에러가 떨어진다.
원인은 URI 에 Query String 파라미터 값으로 한글이 들어갈 경우
backoffice web 에서 backoffice api 로 보내줄 때는 인코딩이 되는데
backoffice api 에서 aws core 로 넘어갈 때 한글 인코딩이 되지 않아 일어난 버그이므로 인코딩 처리를 해주면 된다.
WebClientHelper.java 에 URI 넘겨주는 부분에서 toASCIIString() 처리하여 넘겨주면 해결된다.
package com.jane.core.helper;
import java.net.URI;
@Log4j2
public class WebClientHelper {
private static volatile WebClientHelper webClientHelper;
private final WebClient webClient;
@Getter @Setter
private long connectTimeout = 4000;
@Getter @Setter
private long readTimeout = 4000;
private static volatile HttpHeaders httpHeaders = new HttpHeaders();
private WebClientHelper() {
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(-1)) // to unlimited memory size
.build();
webClient = WebClient.builder().exchangeStrategies(exchangeStrategies).build();
}
public static WebClientHelper getInstance() {
if (webClientHelper == null) {
synchronized (WebClientHelper.class) {
if (webClientHelper == null) {
webClientHelper = new WebClientHelper();
httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
httpHeaders.add(HttpHeaders.ACCEPT_CHARSET, "UTF-8");
}
}
}
return webClientHelper;
}
private T syncHttpClient(HttpMethod httpMethod, URI uri, Object paramObject, Class valueType, HttpHeaders headers) {
uri = URI.create(uri.toASCIIString());
return webClient.method(httpMethod)
.uri(uri)
.headers(httpHeaders -> {
httpHeaders.addAll(headers);
})
.body(BodyInserters.fromValue(paramObject))
.exchange()
.timeout(Duration.ofMillis(connectTimeout))
.doOnError(e -> log.error("Connection Error : ", e))
.onErrorReturn(null)
.block(Duration.ofMillis(readTimeout))
.bodyToMono(valueType)
.doOnError(e -> log.error("Mapping Error : ", e))
.onErrorReturn(null)
.block();
}
private Mono asyncHttpClient(HttpMethod httpMethod, URI uri, Object paramObject, Class valueType, HttpHeaders headers) {
uri = URI.create(uri.toASCIIString());
return webClient.method(httpMethod)
.uri(uri)
.headers(httpHeaders -> {
httpHeaders.addAll(headers);
})
.body(BodyInserters.fromValue(paramObject))
.exchange()
.timeout(Duration.ofMillis(connectTimeout))
.flatMap(clientResponse -> clientResponse.bodyToMono(valueType));
}
}
반응형
'Java' 카테고리의 다른 글
[Java] 정규표현식 Pattern, Matcher (0) | 2021.02.10 |
---|---|
[Java] Object의 Field 값 얻는 방법 (0) | 2021.02.10 |
[Java] Redirecting HTTP to HTTPS in Spring Boot (0) | 2021.02.10 |
[Java] Model 2 Web Architecture (0) | 2021.02.10 |
[Java] Java Web Programming 원리 (0) | 2021.02.10 |