From 841685d86f02a950f3b522f1ec686313c5fbe846 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de> Date: Tue, 12 Feb 2013 16:30:06 +0100 Subject: [PATCH] Use Exceptions mapped to HttpStatus instead of manually set Http status This allows expecting those exceptions in test classes. --- .../controller/AbstractController.java | 12 ++++++++++ .../controller/FeedbackController.java | 14 +++++------ .../controller/FoodVoteController.java | 3 --- .../QuestionByAudienceController.java | 12 +++++----- .../QuestionByLecturerController.java | 24 +++++++++---------- .../arsnova/controller/SessionController.java | 19 +++++++-------- .../exceptions/BadRequestException.java | 5 ++++ .../PreconditionFailedException.java | 5 ++++ 8 files changed, 54 insertions(+), 40 deletions(-) create mode 100644 src/main/java/de/thm/arsnova/exceptions/BadRequestException.java create mode 100644 src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java diff --git a/src/main/java/de/thm/arsnova/controller/AbstractController.java b/src/main/java/de/thm/arsnova/controller/AbstractController.java index 3c379b337..3c86d4a0c 100644 --- a/src/main/java/de/thm/arsnova/controller/AbstractController.java +++ b/src/main/java/de/thm/arsnova/controller/AbstractController.java @@ -6,9 +6,11 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; +import de.thm.arsnova.exceptions.BadRequestException; import de.thm.arsnova.exceptions.ForbiddenException; import de.thm.arsnova.exceptions.NoContentException; import de.thm.arsnova.exceptions.NotFoundException; +import de.thm.arsnova.exceptions.PreconditionFailedException; import de.thm.arsnova.exceptions.UnauthorizedException; public class AbstractController { @@ -31,4 +33,14 @@ public class AbstractController { @ExceptionHandler(NoContentException.class) public void handleNoContentException(final Exception e, final HttpServletRequest request) { } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(BadRequestException.class) + public void handleBadRequestException(final Exception e, final HttpServletRequest request) { + } + + @ResponseStatus(HttpStatus.PRECONDITION_FAILED) + @ExceptionHandler(PreconditionFailedException.class) + public void handlePreconditionFailedException(final Exception e, final HttpServletRequest request) { + } } diff --git a/src/main/java/de/thm/arsnova/controller/FeedbackController.java b/src/main/java/de/thm/arsnova/controller/FeedbackController.java index 627c8fd47..c1a4be8fa 100644 --- a/src/main/java/de/thm/arsnova/controller/FeedbackController.java +++ b/src/main/java/de/thm/arsnova/controller/FeedbackController.java @@ -30,9 +30,11 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.User; +import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.services.IFeedbackService; import de.thm.arsnova.services.IUserService; @@ -61,8 +63,7 @@ public class FeedbackController extends AbstractController { if (value != null && value >= Feedback.MIN_FEEDBACK_TYPE && value <= Feedback.MAX_FEEDBACK_TYPE) { return value; } - response.setStatus(HttpStatus.NOT_FOUND.value()); - return null; + throw new NotFoundException(); } @RequestMapping(value = "/session/{sessionkey}/feedbackcount", method = RequestMethod.GET) @@ -85,6 +86,7 @@ public class FeedbackController extends AbstractController { @RequestMapping(value = "/session/{sessionkey}/feedback", method = RequestMethod.POST) @ResponseBody + @ResponseStatus(HttpStatus.CREATED) public final Feedback postFeedback( @PathVariable final String sessionkey, @RequestBody final int value, @@ -94,15 +96,11 @@ public class FeedbackController extends AbstractController { if (feedbackService.saveFeedback(sessionkey, value, user)) { Feedback feedback = feedbackService.getFeedback(sessionkey); if (feedback != null) { - response.setStatus(HttpStatus.CREATED.value()); return feedback; } - - response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); - return null; + throw new RuntimeException(); } - response.setStatus(HttpStatus.BAD_REQUEST.value()); - return null; + throw new NotFoundException(); } } diff --git a/src/main/java/de/thm/arsnova/controller/FoodVoteController.java b/src/main/java/de/thm/arsnova/controller/FoodVoteController.java index 61269ef5a..f784b03ab 100644 --- a/src/main/java/de/thm/arsnova/controller/FoodVoteController.java +++ b/src/main/java/de/thm/arsnova/controller/FoodVoteController.java @@ -66,7 +66,4 @@ public class FoodVoteController extends AbstractController { public final String getFoodVoteCount() { return Integer.toString(foodService.getFoodVoteCount()); } - - - } diff --git a/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java b/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java index 8001f67dc..01a5ef239 100644 --- a/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java +++ b/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java @@ -32,9 +32,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; import de.thm.arsnova.entities.InterposedQuestion; import de.thm.arsnova.entities.InterposedReadingCount; +import de.thm.arsnova.exceptions.BadRequestException; +import de.thm.arsnova.exceptions.PreconditionFailedException; import de.thm.arsnova.services.IQuestionService; @Controller @@ -84,23 +87,21 @@ public class QuestionByAudienceController extends AbstractController { @RequestMapping(value = "/session/{sessionkey}/interposed", method = RequestMethod.POST) @ResponseBody + @ResponseStatus(HttpStatus.CREATED) public final void postInterposedQuestion( @PathVariable final String sessionkey, @RequestBody final InterposedQuestion question, final HttpServletResponse response ) { if (!sessionkey.equals(question.getSessionId())) { - response.setStatus(HttpStatus.PRECONDITION_FAILED.value()); - return; + throw new PreconditionFailedException(); } if (questionService.saveQuestion(question)) { - response.setStatus(HttpStatus.CREATED.value()); return; } - response.setStatus(HttpStatus.BAD_REQUEST.value()); - return; + throw new BadRequestException(); } @RequestMapping(value = "/session/{sessionkey}/interposed/{questionId}", method = RequestMethod.DELETE) @@ -112,5 +113,4 @@ public class QuestionByAudienceController extends AbstractController { ) { questionService.deleteQuestion(questionId); } - } diff --git a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java index 007ff95af..1dfea5429 100644 --- a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java +++ b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java @@ -33,9 +33,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Question; +import de.thm.arsnova.exceptions.BadRequestException; +import de.thm.arsnova.exceptions.ForbiddenException; +import de.thm.arsnova.exceptions.NoContentException; import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.services.IQuestionService; @@ -59,8 +63,7 @@ public class QuestionByLecturerController extends AbstractController { return question; } - response.setStatus(HttpStatus.NOT_FOUND.value()); - return null; + throw new NotFoundException(); } @RequestMapping( @@ -68,19 +71,17 @@ public class QuestionByLecturerController extends AbstractController { method = RequestMethod.POST ) @ResponseBody + @ResponseStatus(HttpStatus.CREATED) public final Question postQuestion( @RequestBody final Question question, final HttpServletResponse response ) { if (questionService.saveQuestion(question) != null) { - response.setStatus(HttpStatus.CREATED.value()); return question; } - response.setStatus(HttpStatus.BAD_REQUEST.value()); - - return null; + throw new BadRequestException(); } @RequestMapping( @@ -94,7 +95,7 @@ public class QuestionByLecturerController extends AbstractController { @RequestBody final Question question, final HttpServletResponse response ) { - response.setStatus(HttpStatus.NO_CONTENT.value()); + throw new NoContentException(); /* TODO: Not yet implemented! The following code has been copy-and-pasted from postQuestion */ /* @@ -127,8 +128,7 @@ public class QuestionByLecturerController extends AbstractController { @RequestBody final Question question, final HttpServletResponse response ) { - /* TODO: Not yet implemented! */ - response.setStatus(HttpStatus.NO_CONTENT.value()); + throw new NoContentException(); } @@ -143,8 +143,7 @@ public class QuestionByLecturerController extends AbstractController { ) { List<Question> questions = questionService.getSkillQuestions(sessionkey); if (questions == null || questions.isEmpty()) { - response.setStatus(HttpStatus.NOT_FOUND.value()); - return null; + throw new NotFoundException(); } LOGGER.info(questions.toString()); return questions; @@ -188,8 +187,7 @@ public class QuestionByLecturerController extends AbstractController { ) { List<String> answers = questionService.getUnAnsweredQuestions(sessionkey); if (answers == null || answers.isEmpty()) { - response.setStatus(HttpStatus.NO_CONTENT.value()); - return null; + throw new NoContentException(); } return answers; } diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 885e076cb..641d6c21d 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -32,10 +32,13 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; +import de.thm.arsnova.exceptions.NoContentException; +import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.services.ISessionService; import de.thm.arsnova.services.IUserService; @@ -58,6 +61,7 @@ public class SessionController extends AbstractController { @RequestMapping(value = "/session/{sessionkey}/online", method = RequestMethod.POST) @ResponseBody + @ResponseStatus(HttpStatus.CREATED) public final LoggedIn registerAsOnlineUser( @PathVariable final String sessionkey, final HttpServletResponse response @@ -65,12 +69,10 @@ public class SessionController extends AbstractController { User user = userService.getCurrentUser(); LoggedIn loggedIn = sessionService.registerAsOnlineUser(user, sessionkey); if (loggedIn != null) { - response.setStatus(HttpStatus.CREATED.value()); return loggedIn; } - response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); - return null; + throw new RuntimeException(); } @RequestMapping(value = "/session/{sessionkey}/activeusercount", method = RequestMethod.GET) @@ -84,10 +86,10 @@ public class SessionController extends AbstractController { @RequestMapping(value = "/session", method = RequestMethod.POST) @ResponseBody + @ResponseStatus(HttpStatus.CREATED) public final Session postNewSession(@RequestBody final Session session, final HttpServletResponse response) { Session newSession = sessionService.saveSession(session); if (session != null) { - response.setStatus(HttpStatus.CREATED.value()); return newSession; } @@ -100,13 +102,11 @@ public class SessionController extends AbstractController { public final List<Session> getMySession(final HttpServletResponse response) { String username = userService.getCurrentUser().getUsername(); if (username == null) { - response.setStatus(HttpStatus.NOT_FOUND.value()); - return null; + throw new NotFoundException(); } List<Session> sessions = sessionService.getMySessions(username); if (sessions == null || sessions.isEmpty()) { - response.setStatus(HttpStatus.NOT_FOUND.value()); - return null; + throw new NotFoundException(); } return sessions; } @@ -116,8 +116,7 @@ public class SessionController extends AbstractController { public final List<Session> getMyVisitedSession(final HttpServletResponse response) { List<Session> sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser()); if (sessions == null || sessions.isEmpty()) { - response.setStatus(HttpStatus.NO_CONTENT.value()); - return null; + throw new NoContentException(); } return sessions; } diff --git a/src/main/java/de/thm/arsnova/exceptions/BadRequestException.java b/src/main/java/de/thm/arsnova/exceptions/BadRequestException.java new file mode 100644 index 000000000..f2289bf51 --- /dev/null +++ b/src/main/java/de/thm/arsnova/exceptions/BadRequestException.java @@ -0,0 +1,5 @@ +package de.thm.arsnova.exceptions; + +public class BadRequestException extends RuntimeException { + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java b/src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java new file mode 100644 index 000000000..827f0c5bf --- /dev/null +++ b/src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java @@ -0,0 +1,5 @@ +package de.thm.arsnova.exceptions; + +public class PreconditionFailedException extends RuntimeException { + private static final long serialVersionUID = 1L; +} -- GitLab