2021-03-27-TIL
2021-03-27-TIL
study-whiteship
활용하는 문법 vs 라이브러리를 이해하기 위한 문법
컴파일 타임에 무엇이 어떻게 동작하는지 알수는 없다. 그러면 이제 런타임으로 넘어가는데 거기에서 리플렉션과 어노테이션을 모르면 이해를 할 수가 없다.
- 인터페이스의 상속 부분을 그림으로 그리기
- 리플렉션 디버깅해보기, 스프링 까보기
- 콜렉션 프레임워크 까보기
Spring Bean에서 현재의 url을 그대로 가져오기
1
2
3
4
5
6
7
8
9
private Question findQuestionWithSession(Long id, HttpSession session) {
User sessionedUser = HttpSessionUtils.getUserFromSession(session);
Question question = questionService.findQuestionById(id);
if (!question.isSameWriter(sessionedUser)) {
throw new IllegalUserAccessException();
}
return question;
}
IllegalUserAccessException
이 발생했을 때 아래와 같이 “/user/login” 페이지로 포워딩하는 작업만 수행하고 있다. 하지만 경우에 따라서 해당 페이지로 다시 포워딩하는게 훨씬 자연스러운 경우가 많다. 그렇다면 현재 url로 포워딩하도록 하는 방법이 없을까?
1
2
3
4
5
6
7
8
9
@ControllerAdvice
public class GlobalControllerExceptionHandler {
...
@ExceptionHandler(IllegalUserAccessException.class)
private String handleIllegalUserAccessException(Model model, IllegalUserAccessException e) {
model.addAttribute("errorMessage", e.getMessage());
return "/user/login";
}
}
첫번째 방법 - 예외 사항 별 구별하기
예외 사항 별 문자열 상수(혹은 번호)를 만들어 놓고 구별하는 것이다. 예를 들어, 똑같은 IllegalUserAccessException
라도 해당 예외 안에 상수 필드를 두고 예외 메시지를 통해서 구별하는 것이다.
1
2
3
4
5
6
7
8
9
10
11
public class IllegalUserAccessException extends RuntimeException {
public static final String ILLEGAL_QUESTION_ACCESS = "Cannot access other user's question.";
public IllegalUserAccessException() {
super("Cannot access other user's information.");
}
public IllegalUserAccessException(String message) {
super(message);
}
}
Spring Boot Exception Handling
- https://reflectoring.io/spring-boot-exception-handling/
- https://www.toptal.com/java/spring-boot-rest-api-error-handling
Difference between Forward and Redirect
- https://stackoverflow.com/questions/28697681/spring-mvc-controller-what-is-the-difference-between-return-forward-return#:~:text=Forward%3A%20is%20faster%2C%20the%20client,request%20to%20the%20redirected%20URL.
This post is licensed under CC BY 4.0 by the author.