반응형
java 코드 중 List<NameValuePair> 접하여 한번 찾아보게 되었다.
- List: 리스트는 배열과 유사한 데이터 구조로, 여러 항목을 순서대로 저장할 수 있는 컬렉션입니다. 리스트는 크기를 동적으로 조절할 수 있어, 필요에 따라 항목을 추가하거나 삭제할 수 있습니다.
- <NameValuePair>: 제네릭은 자바에서 클래스나 메소드를 정의할 때 타입을 파라미터화할 수 있도록 해줍니다. <NameValuePair>는 특정한 타입의 요소들을 저장하는 리스트를 생성할 때 사용되는 파라미터화된 타입입니다.
NameValuePair는 이름-값 쌍의 데이터를 나타내는 인터페이스입니다. 주로 HTTP 요청과 같은 곳에서 사용되며, 각 이름은 문자열이고, 해당하는 값은 문자열이나 기타 타입일 수 있습니다. 주로 NameValuePair를 사용하여 키와 값을 쌍으로 묶어 데이터를 표현하거나 전달합니다.
예를 들어 코드를 보면
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// List<NameValuePair> 생성
List<NameValuePair> pairList = new ArrayList<>();
// NameValuePair 추가
pairList.add(new BasicNameValuePair("name", "John"));
pairList.add(new BasicNameValuePair("age", "30"));
pairList.add(new BasicNameValuePair("city", "New York"));
// 리스트 출력
for (NameValuePair pair : pairList) {
System.out.println("Name: " + pair.getName() + ", Value: " + pair.getValue());
}
}
}
이렇게 Map 을 사용하는거처럼 key값을 넣어 사용할수 있습니다.
저는 이걸 컨트롤러로 전송하였을때 HttpServletRequest request 에서
GET인지 POST에 따라 키값을 꺼내는 코드가 조금 다릅니다
- . GET
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
public class HttpClientExample {
public static void main(String[] args) throws IOException, URISyntaxException {
// GET 요청을 보낼 URL 설정
String url = "http://localhost:8080/getExample";
// NameValuePair 리스트 생성 및 데이터 추가
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("name", "John"));
params.add(new BasicNameValuePair("age", "30"));
// GET 요청 생성 및 파라미터 추가
URI uri = new URI(url + "?" + URLEncodedUtils.format(params, "UTF-8"));
HttpGet httpGet = new HttpGet(uri);
// HttpClient 생성 및 요청 전송
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
httpClient.execute(httpGet);
}
}
}
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.nio.charset.StandardCharsets;
import java.util.List;
@Controller
public class GetExampleController {
@GetMapping("/getExample")
@ResponseBody
public String handleGetRequest(HttpServletRequest request) {
List<NameValuePair> params = URLEncodedUtils.parse(request.getQueryString(), StandardCharsets.UTF_8);
// 데이터 추출 및 처리
StringBuilder result = new StringBuilder();
for (NameValuePair pair : params) {
result.append("Name: ").append(pair.getName()).append(", Value: ").append(pair.getValue()).append("\n");
}
return result.toString();
}
}
반응형
- . POST
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class HttpClientExample {
public static void main(String[] args) throws IOException {
// POST 요청을 보낼 URL 설정
String url = "http://localhost:8080/postExample";
// NameValuePair 리스트 생성 및 데이터 추가
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("name", "John"));
params.add(new BasicNameValuePair("age", "30"));
// POST 요청 생성 및 파라미터 추가
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
// HttpClient 생성 및 요청 전송
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
httpClient.execute(httpPost);
}
}
}
import org.apache.http.NameValuePair;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class PostExampleController {
@PostMapping("/postExample")
@ResponseBody
public String handlePostRequest(@RequestBody List<NameValuePair> data) {
// 데이터 처리
StringBuilder result = new StringBuilder();
for (NameValuePair pair : data) {
result.append("Name: ").append(pair.getName()).append(", Value: ").append(pair.getValue()).append("\n");
}
return result.toString();
}
}
이렇게 요청을 할때 GET과 POST 를 httpPost인지 httpGet인지 구분해서 요청을 해서 사용할수있는데요
Post요청 데이터를 처리할때 포문을 쓰지않고 Spring[] 로 값을 request.getParameterMap(); 값을 받아
키값을 꺼내어 사용할수도 있습니다.
반응형
'코딩 > 스프링(Spring)' 카테고리의 다른 글
[spring] SQL 최근 기준 일주일기간 조회하기 (0) | 2024.04.18 |
---|---|
[Spring] UUID 활용하기: 고유 식별자의 중요성과 UUID의 활용 방법 (0) | 2023.07.22 |
[Spring] ModelAndView를 활용한 뷰와 모델의 효과적인 전달 (0) | 2023.07.21 |
[Spring] 레거시 시스템과 스프링 부트의 차이점 (0) | 2023.07.20 |
[Spring] @PostConstruct 어노테이션을 활용한 초기화 메서드 실행 (0) | 2023.07.19 |
댓글