Skip to content

HTTP 요청을 허용하는 서버 구현 #3

@mjj111

Description

@mjj111

📄 구현 포인트

  • HTTP 요청에 대한 Enum 추가
  • 쿼리스트링 값을 Map으로 반환하는 메서드를 가진 클래스 구현
  • 받은 Json 값을 QueryString으로 변환하는 클래스 구현
  • POST와 GET 요청에 대해 동적으로 응답할 수 있도록 핸들러 구현
  • 회원 객체 구현

✅ 간략한 코드 설명

1.HTTP 요청에 대한 Enum 추가합니다.
String 값으로 값을 계속해서 비교하기 보다는 미리 Enum으로 선언하여 활용하도록 합니다.

POST("POST"), GET("GET"), PATCH("PATCH"), DELETE("DELETE");

2.요청으로부터 받은 URL에서 쿼리값을 추출합니다.
추출한 값은 = 와 &에 맞춰 key값과 value로 분류하여 Map에 저장하도록 합니다.

    public static Map<String, String> parseQueryString(final String queryString) {
        Map<String, String> result = new HashMap<>();
        String[] splintedQuery = queryString.split("&");

        for(String sentence : splintedQuery) {
            String[] query = sentence.split("=");

            String key = query[0];
            String value = query[1];

            result.put(key, value);
        }

        return result;
    }
  1. requsetBody에 값이 들어올 경우, 값을 파싱해줘야하므로
    받은 Json 값을 QueryString으로 변환하도록 합니다.
public static String readData(final BufferedReader br, final int contentLength) throws IOException {
        char[] body = new char[contentLength];
        br.read(body, 0, contentLength);
        return convertJsonToUrl(String.copyValueOf(body));
    }

    public static String convertJsonToUrl(final String json) {
        StringBuffer sb = new StringBuffer();
        String[] keyValuePairs = json.replaceAll("[{}\"]", "").split(",");

        for (String pair : keyValuePairs) {
            String[] keyValue = pair.split(":");
            String key = keyValue[0].trim();
            String value = keyValue[1].trim();
            sb.append(key).append("=").append(value).append("&");
        }

        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }
  1. POST와 GET 요청에 대해 값을 파싱할 수 있도록 분기를 나눠서 적용해줍니다.
 //POST
 if(HttpRequestMethod.POST.equals(method) && url.equals("/users/create")) {

//GET
else if(HttpRequestMethod.GET.equals(method) && url.startsWith("/users")) {
  1. 회원 생성 요청시 파싱하여 받은 값을 기반으로 만들 User 객체를 생성합니다.
public class User {
    private final String userId;
    private final String password;
    private final String name;
    private final String email;

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions