HttpClient 사용하기 - Paramater 보내기

HttpClient 사용하기 - Paramater 보내기

  • Client가 서버로 요청과 함께 Paramater를 보내는 방법은 크게 Form 형태의 데이터를 보내는 방법과 JSON 형태의 데이터를 보내는 방법이 있다.
  • 보통 Form 형태의 데이터는 (Key, Value) 형태의 데이터로 Http Body에 넣어서 보내고
  • JSON 형태의 데이터는 String 형태로 변환해 Http Body에 넣어서 보낸다.
  • Form 형태의 데이터를 보낼 때 Header는 application/x-www-form-urlencoded 로 요청을 보내고
  • JSON 형태의 데이터를 보낼 때 Header는 application/json 로 요청을 보낸다.

Paramater 요청 받을 수 있는 Back-end 코드

/test/params 에 들어오는 Http 요청과 함께 오는 Paramater 내용을 찍어주는 로직을 작성해준다. Form 형태의 Paramater를 받을 때는 @RequestParam 을 이용해 데이터를 가져올 수 있다.

@PostMapping("/test/params")
public ResponseEntity testParams(@RequestParam("name") String name, @RequestParam("nickname") String nickName){
log.info("=========================== start ============================");
log.info("Name : " + name);
log.info("Nickname : " + nickName);
log.info("============================ end =============================");

return ResponseEntity.ok().build();
}

요청시 보내는 Paramater 작성

  • 요청시 보내는 Paramater는 NameValuePair 객체를 이용해 (Key, Value) 형태로 값을 넣어준다.
  • 작성이 완료된 NameValuePair 객체를 이용해 HttpEntity 객체를 생성한다.
  • HttpEntity 객체를 요청 객체 Entity에 넣어서 Http 요청을 보내면 요청시 Paramater도 같이 전달 된다.
  • UrlEncodedFormEntity 를 이용해 만들어진 Entity에 대한 요청은 ContentTypeapplication/x-www-form-urlencoded 으로 보내진다.
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("name", "test"));
params.add(new BasicNameValuePair("nickname", "victor"));
// NameValuePair 객체 이용해 HttpEntity 객체를 생성한다.
HttpEntity entity = new UrlEncodedFormEntity(params);
// 요청 객체에 Entity에 Paramater 넣어주기
httpPost.setEntity(entity);

전체 소스 코드

public class JavaHttpClientParam {
public static void main(String[] args) throws IOException {

BufferedReader br;

CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/test/params");

List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("name", "test"));
params.add(new BasicNameValuePair("nickname", "victor"));
HttpEntity entity = new UrlEncodedFormEntity(params);
httpPost.setEntity(entity);

CloseableHttpResponse response = client.execute(httpPost);

System.out.println("=========================== start ============================");

System.out.println("Http Status Code : " + response.getStatusLine().getStatusCode());

System.out.println("============================ end =============================");
}
}

JSON 요청 보내기

Paramater 요청 받을 수 있는 Back-end 코드

  • /test/json 에 들어오는 Http 요청과 함께 오는 JSON 내용을 찍어주는 로직을 작성해준다.
  • JSON 형태의 Paramater를 받을 때는 @RequestBody 을 이용해 Request Body 내 데이터를 가져올 수 있다.
@PostMapping("/test/json")
public ResponseEntity testJsonParams(@RequestBody TestParam param){
log.info("=========================== start ============================");
log.info("Name : " + param.getName());
log.info("Nickname : " + param.getNickname());
log.info("============================ end =============================");

return ResponseEntity.ok().build();
}

name과 nickname을 JSON 형태의 요청으로 보내기 위해 해당 값들을 인자로 갖는 TestParam 클래스를 만들어 준다.

class TestParam implements Serializable {
private String name;
private String nickname;

public TestParam(String name, String nickname){
this.name = name;
this.nickname = nickname;
}
}

객체를 String으로 변환하기

  • ObjectMapper 를 이용해 TestParam 객체를 String 으로 변환한다.
  • 만들어진 String 값을 이용해 Entity 객체를 생성한 후 Request(요청) 객체 Entity 에 넣어준다.
TestParam param = new TestParam("test", "Victor");
ObjectMapper objectMapper = new ObjectMapper();

// 객체를 ObjectMapper 를 이용해 String으로 변환한 후 StringEntity 객체를 생성한다.
StringEntity stringEntity = new StringEntity(objectMapper.writeValueAsString(param));
// 요청 Entity에 넣어준다.
httpPost.setEntity(stringEntity);

ContentType 변경하기

JSON 형태의 요청을 보내기 위해서는 요청 Header 내 Content-typeapplication/json 로 설정해서 보내준다.

httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
CloseableHttpResponse response = httpClient.execute(httpPost);

전체 소스 코드

public class JavaHttpClientJson {


public static void main(String[] args) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/test/json");

TestParam param = new TestParam("test", "Victor");
ObjectMapper objectMapper = new ObjectMapper();

StringEntity stringEntity = new StringEntity(objectMapper.writeValueAsString(param));
httpPost.setEntity(stringEntity);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
CloseableHttpResponse response = httpClient.execute(httpPost);


System.out.println("=========================== start ============================");

System.out.println(objectMapper.writeValueAsString(param));
System.out.println("Http Status Code : " + response.getStatusLine().getStatusCode());

System.out.println("============================ end =============================");
}
}

class TestParam implements Serializable {
private String name;
private String nickname;

public TestParam(String name, String nickname){
this.name = name;
this.nickname = nickname;
}

public String getName(){
return name;
}

public String getNickname(){
return nickname;
}
}
Share