Skip to content

Commit

Permalink
feat: 지원 하지 않는 메소드 예외 처리
Browse files Browse the repository at this point in the history
  • Loading branch information
shb03323 committed Sep 9, 2023
1 parent 51a3700 commit e2fd801
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.apache.coyote.controller;

import org.apache.coyote.controller.exception.UnsupportedRequestMethodException;
import org.apache.coyote.httprequest.HttpRequest;
import org.apache.coyote.httprequest.RequestMethod;
import org.apache.coyote.httpresponse.HttpResponse;

public abstract class AbstractController implements Controller {

@Override
public void service(final HttpRequest httpRequest, final HttpResponse httpResponse) {
if (httpRequest.isSameRequestMethod(RequestMethod.GET)) {
doGet(httpRequest, httpResponse);
return;
}
if (httpRequest.isSameRequestMethod(RequestMethod.POST)) {
doPost(httpRequest, httpResponse);
return;
}
throw new UnsupportedRequestMethodException();
}

protected abstract void doPost(final HttpRequest httpRequest, final HttpResponse httpResponse);

protected abstract void doGet(final HttpRequest httpRequest, final HttpResponse httpResponse);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.apache.coyote.controller;

import org.apache.coyote.httprequest.HttpRequest;
import org.apache.coyote.httpresponse.HttpResponse;

public interface Controller {

void service(final HttpRequest httpRequest, final HttpResponse httpResponse);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.apache.coyote.controller.exception;

public class UnsupportedRequestMethodException extends IllegalArgumentException {

public UnsupportedRequestMethodException() {
super("지원하지 않는 Request Method 입니다.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.apache.coyote.controller;

import org.apache.coyote.controller.exception.UnsupportedRequestMethodException;
import org.apache.coyote.httprequest.HttpRequest;
import org.apache.coyote.httpresponse.HttpResponse;
import org.apache.coyote.httpresponse.handler.HandlerTestSupport;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.*;

@SuppressWarnings("NonAsciiCharacters")
class AbstractControllerTest extends HandlerTestSupport {

@Test
void 지원하지_않는_메소드에_대해_예외를_터트린다() {
// given
final String input = String.join("\r\n",
"DELETE /login HTTP/1.1",
"Host: localhost:8080",
"Connection: keep-alive",
"Accept: */*");
final HttpRequest httpRequest = super.makeHttpRequest(input);
final HttpResponse httpResponse = HttpResponse.init(httpRequest.getHttpVersion());

// when
final AbstractController abstractController = new AbstractController() {
@Override
protected void doPost(final HttpRequest httpRequest, final HttpResponse httpResponse) {
}

@Override
protected void doGet(final HttpRequest httpRequest, final HttpResponse httpResponse) {
}
};

// then
assertThatThrownBy(() -> abstractController.service(httpRequest, httpResponse))
.isInstanceOf(UnsupportedRequestMethodException.class);
}
}

0 comments on commit e2fd801

Please sign in to comment.