[java] Apache HttpClient를 사용하여 JSON 요청을 게시하는 방법은 무엇입니까?

다음과 같은 것이 있습니다.

final String url = "http://example.com";

final HttpClient httpClient = new HttpClient();
final PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Content-Type", "application/json");
postMethod.addParameters(new NameValuePair[]{
        new NameValuePair("name", "value)
});
httpClient.executeMethod(httpMethod);
postMethod.getResponseBodyAsStream();
postMethod.releaseConnection();

500으로 계속 돌아옵니다. 서비스 제공 업체에서 JSON을 보내야한다고 말합니다. Apache HttpClient 3.1+로 어떻게 수행됩니까?



답변

Apache HttpClient는 JSON에 대해 전혀 알지 못하므로 JSON을 별도로 구성해야합니다. 이를 위해 json.org 에서 간단한 JSON-java 라이브러리를 확인하는 것이 좋습니다 . ( “JSON-java”가 적합하지 않은 경우 json.org에는 다양한 언어로 제공되는 많은 라이브러리 목록이 있습니다.)

JSON을 생성했으면 아래 코드와 같은 것을 사용하여 게시 할 수 있습니다.

StringRequestEntity requestEntity = new StringRequestEntity(
    JSON_STRING,
    "application/json",
    "UTF-8");

PostMethod postMethod = new PostMethod("http://example.com/action");
postMethod.setRequestEntity(requestEntity);

int statusCode = httpClient.executeMethod(postMethod);

편집하다

주-질문에서 요청한 위의 답변은 Apache HttpClient 3.1에 적용됩니다. 그러나 최신 Apache 클라이언트에 대한 구현을 찾는 모든 사람을 돕기 위해 :

StringEntity requestEntity = new StringEntity(
    JSON_STRING,
    ContentType.APPLICATION_JSON);

HttpPost postMethod = new HttpPost("http://example.com/action");
postMethod.setEntity(requestEntity);

HttpResponse rawResponse = httpclient.execute(postMethod);


답변

들어 아파치 HttpClient를 4.5 이상 버전 :

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost("http://targethost/login");
    String JSON_STRING="";
    HttpEntity stringEntity = new StringEntity(JSON_STRING,ContentType.APPLICATION_JSON);
    httpPost.setEntity(stringEntity);
    CloseableHttpResponse response2 = httpclient.execute(httpPost);

노트 :

1 코드를 컴파일하려면 httpclient패키지와 httpcore패키지를 모두 가져와야합니다.

2 try-catch 블록이 생략되었습니다.

참고 :
appache 공식 가이드

Commons HttpClient 프로젝트는 이제 수명이 종료되었으며 더 이상 개발되지 않습니다. HttpClient 및 HttpCore 모듈에서 Apache HttpComponents 프로젝트로 대체되었습니다.


답변

janoside 의 우수한 답변에서 언급했듯이 JSON 문자열을 구성하고 StringEntity.

JSON 문자열을 구성하려면 익숙한 라이브러리 나 메서드를 사용할 수 있습니다. Jackson 라이브러리는 쉬운 예입니다.

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;

ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("name", "value"); // repeat as needed
String JSON_STRING = node.toString();
postMethod.setEntity(new StringEntity(JSON_STRING, ContentType.APPLICATION_JSON));


답변