void actionRemove(String cmd) {
int id = getParamAsInt(cmd, "id", 0);
if (id == 0) {
System.out.println("id를 정확히 입력해주세요.");
return; // 함수를 끝낸다.
}
System.out.printf("%d번 명언을 삭제합니다.\n", id);
}
int getParamAsInt(String cmd, String paramName, int defaultValue) {
String[] cmdBits = cmd.split("\\?", 2);
String queryString = cmdBits[1];
String[] queryStringBits = queryString.split("&");
for (int i = 0; i < queryStringBits.length; i++) {
String queryParamStr = queryStringBits[i];
String[] queryParamStrBits = queryParamStr.split("=", 2);
String _paramName = queryParamStrBits[0];
String paramValue = queryParamStrBits[1];
if (_paramName.equals(paramName)) {
try {
// 문제가 없을 경우
return Integer.parseInt(paramValue);
} catch (NumberFormatException e) {
// 문제가 생긴 경우
return defaultValue;
}
}
}
삭제 기능에서 항상 "삭제?id=1"의 형태로 요청이 들어올거라고 생각하고 단순히 코드를 구현했는데, 그렇지 않을 경우도 있으니 요청에서 queryString들을 추출하고 그 안에서 또 파라미터 이름과 값들을 분류해야한다는 생각은 하지 못했다.
여러 요청에 대응하기 위해 코드를 수정하는 과정이 어려웠지만 재밌기도 했다.