개요

ES등을 쓰다보면 자바로 HttpClient로 POST 사용시 JSON 데이터 자체를 전송하고 싶을 때가 있다. 이때 쓸 수 있는 방법을 Argus 쪽 소스를 보다가 잘 구현이 되어있는것 같아 발췌해서 공유한다.

StringEntity대신 ByteArrayEntity를 사용하는 이유는 일부 body값이 일부 유실되는것 같은 현상을 뒤늦게 관측했기 때문이다. String을 getBytes()로 변환하여 사용하자.

소스코드

private HttpResponse executeHttpRequest(HttpMethod requestType, String url, ByteArrayEntity entity) {
    HttpResponse httpResponse = null;
    CloseableHttpClient port = url.startsWith(_writeEndpoint) ? _writePort : _readPort;

    if (entity != null) {
        entity.setContentType("application/json");
    }
    try {
        switch (requestType) {
            case POST:

                HttpPost post = new HttpPost(url);

                post.setEntity(entity);
                httpResponse = port.execute(post);
                break;
            case GET:

                HttpGet httpGet = new HttpGet(url);

                httpResponse = port.execute(httpGet);
                break;
            case DELETE:

                HttpDelete httpDelete = new HttpDelete(url);

                httpResponse = port.execute(httpDelete);
                break;
            case PUT:

                HttpPut httpput = new HttpPut(url);

                httpput.setEntity(entity);
                httpResponse = port.execute(httpput);
                break;
            default:
                throw new MethodNotSupportedException(requestType.toString());
        }
    } catch (IOException | MethodNotSupportedException ex) {
        throw new SystemException(ex);
    }
    return httpResponse;
}