Springあるある 썸네일형 리스트형 API 오류 처리 시의 BasicErrorController의 한계점(Feat. @ExceptionHandler) 스프링 부트는 기본적으로 예외/sendError() 발생 시, 개발자가 에러 처리 컨트롤러를 등록하지 않게 되면자동적으로 WAS에서 "/error"(수정 가능)을 재요청하여 BasicExceptionController에서 처리하게 만들어 져 있다. BasicErrorController 컨트롤러는 기본적으로 아래와 같은 메서드를 제공한다. 위 코드를 분석해 보면 응답 에러 발생시 1] HTML 오류 페이지 2] JSON 방식위 2가지 방식으로 오류 상태를 클라이언트에게 보내 준다. 아래의 코드는 ResponseEntity를 이용하여 API 응답 오류를 JSON으로 반환하는 예시이다. @Slf4j@Controllerpublic class ErrorPageController { // RequestDisp.. 더보기 API 오류 처리 시 주의할 점!!(Feat. Accept 헤더) @Slf4j@Controllerpublic class ErrorPageController { // RequestDispatcher 클래스에 final static으로 정의돼 있음 public final static String FORWARD_REQUEST_URI = "jakarta.servlet.forward.request_uri"; public final static String FORWARD_CONTEXT_PATH = "jakarta.servlet.forward.context_path"; public final static String FORWARD_MAPPING = "jakarta.servlet.forward.mapping"; public final static Strin.. 더보기 WebServerFactoryCustomizer<>(Feat. 오류 페이지 처리, Error page) 우선 "서블릿 컨테이너는 스프링(정확히는 스프링 부트)가 실행/관리"한다는 점을 상기하자!스프링에서 예외(Exception)이나 Response에 오류 정보가 담긴 경우 WAS까지 그 정보가 전달이 된다. 이때 스프링에서 별도로 개발자가 오류 페이지를 만들어 주지 않으면 WAS 자체에 이미 만들어 져 있는 사용자 친화적이지지 않은 오류 페이지를 전송을 한다. (스프링에서 오류를 전달하는 2가지 방법1] 예외(Exception) 전달2] Response 객체에 오류 상태 지정) 고로, 우리는 WAS가 오류를 만났을 때 개발자가 만든 사용자 친화적 오류 페이지를 보여 주도록 개발을 해야 한다. 스트링 부트는 WebServerCustimizer를 사용하여 WAS(톰캣)가 개발자가 만든 오류 페이지를 찾도록 개.. 더보기 원하는 기능을 Annotation을 만들어서 활용하기(Feat. ArgumentResolver,Login, @Login) 우리는 아래의 코드와 같이 @Login 애노테이션이 붙어 있으면 해당 회원(Member)가 로그인된 회원인지 아닌 지를 판단한 후, 컨트롤러 매개변수인 Member member에 값을 매핑하는 기능을 만들고 싶다. 이때 사용되는 스프링 인터페이스가 바로 ArgumentResolver이다. @Slf4j@Controller@RequiredArgsConstructorpublic class HomeController { @GetMapping("/") public String homeLoginV3SpringArgumentResolver(@Login Member loginMember, Model model) { if(loginMember == null) retu.. 더보기 HandlerMethod 인터페이스(Feat. @RequestMapping,ResourceHttpHandler,preHandle()) @Slf4jpublic class LogInterceptor implements HandlerInterceptor { public static final String LOG_ID = "logId"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, // @RequestMapping 요청인 경우 handler 매개변수에 HandlerMethod가 넘어옴 // 정적 리소스 요청인 경우 handler 매개변수에 ResourceHttpRequestHandler가 넘어옴 Object handler) throws Exception { .. 더보기 ResourceHttpRequestHandler(Feat. 정적 리소스, static resource) ResourceHttpRequestHandler는 Spring Framework에서 제공하는 클래스 중 하나로, 정적 리소스 요청을 처리하는 데 사용됩니다.이 클래스는 주로 정적 파일(HTML, CSS, JavaScript, 이미지 등)을 제공하기 위한 컨텍스트에서 사용됩니다.아래는 ResourceHttpRequestHandler를 사용하는 예제입니다예제: 정적 리소스 제공1. 기본 설정Spring에서 정적 리소스를 제공하려면 기본적으로 ResourceHttpRequestHandler가 이미 사용되고 있습니다.(맨 아래 부분에서 이에 대한 설명이 있음)보통 application.properties나 Java Config로 정적 리소스를 설정합니다.@Configuration@EnableWebMvcpubli.. 더보기 스프링 인터셉터(FEAT. Spring Interceptor) 참고로 스프링(스프링 MVC)의 시작은 서블릿(정확히는 Dispatcher Servlet)이라는 점을 잊지 말자 // 스프링 인터셉트 public interface HandlerInterceptor {// 아래 3개의 메서드를 제공 default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {} default void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, @Nullable ModelAndView modelAndView) throws Ex.. 더보기 Logback MDC(Feat. LogFilter,Filter) 스프링 MVC 2편 [서블릿 필터] 강의에서 인터페이스 Filter를 아래와 같이 구현하여 Http 요청과 응답까지의 Log 기록을남겼다. @Slf4jpublic class LogFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("log Filter init()"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException.. 더보기 이전 1 2 3 4 다음