코드는 차이점은 포트를 8081로 바꾼 점 밖에 없는 데 에서 id와 상품명을 눌러서 이동할 때 ERROR 15300 --- [nio-8081-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.Long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root cause 오류가 났습니다 해결은 여기 설정을 다시 gradle로 바꾸니까 해결은 됬는데 어째서 문제가 생겼던건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 상품 내용 수정 폼에서 저장을 해줄 때 리다이렉트를 하는 이유가 무엇인지 궁금합니다. 전에 했던 방식으로 뷰를 반환하면 안되는 것인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @ModelAttribute 어노테이션을 쓸 때, 해당 객체를 부르는 클래스 타입 위에 @Data 어노테이션을 사용하셨어요. 근데 @Data 어노테이션 안에 @RequiredArgsContstructor라는 어노테이션이 있는데 제가 보니까 @RequiredArgsContstructor는 멤버 변수의 접근제어자가 private이며 final이 붙은 애들에 대한 생성자를 자동으로 만들어준다. 라고 하거든요 근데 HelloData 클래스 안의 멤버 변수 (필드값)은 private이길래 @RequiredArgsContstructor 대신 @AllArgContstructor 어노테이션과 @Getter, @Setter 어노테이션만 사용해서 @ModelAttribute 어노테이션을 통해 요청하는 값에 대해 바인딩을 하려고 했는데, 바인딩이 안되는 오류가 발생해서 왜 이런 오류가 발생하는지 잘 모르겠습니다. 꼭 @RequiredArgsConstructor를 써야하는 이유에 대해서도 궁금하고, @AllArgConstructor는 왜 안되는지 궁금합니다.
안녕하세요, 스프링 부트에서 인터셉터로 로그인 체크를 하면서 오류 페이지를 보이도록 하는데 인터셉터의 excludePathPatterns와 관련하여 질문글을 올립니다. BasicErrorController가 <예외 처리와 오류 페이지> 강의 전반에 걸쳐 했던 작업들을 모두 자동으로 해주기 때문에, 개발자는 오류 페이지만 resources/templates/error/4xx.html 등의 경로에 생성해주면 된다 이해했습니다. 이 과정에서 작성할 부분은 오류페이지 html 로그인 인터셉터 구현 및 WebConfig에 인터셉터 등록, 설정 BasicErrorController의 기본 경로인 "/error" 제외하기 라고 생각했는데, 실제로 저 부분만 작성하여 컨트롤러에 등록되지 않은 url로 테스트를 해보니 인터셉터로 인해 로그인 페이지로 이동됩니다. 제가 작성한 WebConfig의 코드는 아래와 같습니다. @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { log.info("addInterceptors 실행"); registry.addInterceptor(new MyInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/", "/user/join", "/user/login", "/user/logout", "/css/**", "/*.ico", "/error"); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new LoginUserArgumentResolver()); } } 인터셉터 관련 부분만 주석처리하고 테스트를 해보면 BasicController가 작동을 잘 하여 오류 페이지가 보이는데, 인터셉터의 경로를 제외하는 부분에서 제가 잘못 작성한 부분이 있을까요? 그렇지 않다면 제가 놓친 다른 부분이 있을까요?
안녕하세요. @ExceptionHandler 강의에서 예를 들어주시던 상품을 처리하는 컨트롤러와 주문을 처리하는 컨트롤러에서 발생하는 예외를 다른 응답방식으로 처리하고 싶다면 @Data @AllArgsConstructor public class ProductErrorResult { private String productName; private String code; private String message; } @Data @AllArgsConstructor public class OrderErrorResult { private int orderNumber; private String code; private String message; } 예를 들면 위와 같은 방식으로 각각 상품과 주문에러 처리를 다른 DTO객체로 만들어서 api json 응답을 하면 되는것일까요? + 추가로, 또한 @ExceptionHanlder(annotation = ProoductController.class) @ExceptionHandler(annotaion= OrderProduct.class) 각각의 특정 클래스(상품 ,주문 클래스)를 개별적으로 달아주면 한개의 @RestControllerAdvice 에서 "같은 예외도 다른 방식으로 처리" 가 가능한 것이죠?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니요 [질문 내용] 여기에 질문 내용을 남겨주세요. 무료강의 잘들었습니다, 감사합니다, 이제 스프링과 스프링부트,JPA 완전정복 로드맵 구매를 고려하고 있는데 앞선 다른 질문글보니 이 강의는 소스코드가 따로 github에 공유가 안되는데 저 로드맵들에 있는 유료강의에서는 제공이 되나요? ps. 제가 공부할때 필기하며 싹 강의 듣고 코드보면서 공부하는 스타일라서요
[질문 내용] 오타가 있는지 꼼꼼히 확인했는데도 조회하지 못해 글 올립니다. 회원을 입력하고 조회할 때의 페이지 소스를 보면 값은 제대로 들어갔는데 뷰로 보이지가 않습니다. https://drive.google.com/file/d/10VLD9t8EssyDyLIPXITCINxJUngSrQyz/view?usp=sharing
20:35 예시 코드처럼 입력했는데, 공백을 입력하고 중복확인을 하는 경우처럼 반환되는 Member 가 없는 경우 NullPointerException 이 발생합니다. memID 로 찾아지는 Member 가 있는 경우 0 을 반환하면서 잘 동작합니다. 선생님 예시에서는 작동이 잘 되는데 왜 저는 안 되는 걸까요? 옵셔널이나 예외처리를 해주어야 할까요? @RequestMapping("/memRegisterCheck.do") public @ResponseBody int memRegisterCheck(@RequestParam("memID") String memID) { //넘어오는 파라미터 이름과 받는 이름이 같은 경우 생략 가능 Member m = memberMapper.registerCheck(memID); if (m != null || m.equals("")) { //아이디가 중복이거나 공백인 경우 => 사용불가 return 0; } return 1; //사용 가능 } java.lang.NullPointerException kr.board.controller.MemberController.memRegisterCheck(MemberController.java:25) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:871) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:777) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870) javax.servlet.http.HttpServlet.service(HttpServlet.java:489) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) javax.servlet.http.HttpServlet.service(HttpServlet.java:583) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 듣기 전에 혼자서 update 테스트 코드를 짜봤는데 오류가 나더라고요. 어느 부분이 잘못된건지 알 수 있을까요? void updateItem(){ //given Item item1=new Item("itemA",10000,10); itemRepository.save(item1); //when Item item2=new Item("itemB",20000,12); itemRepository.update(item1.getId(),item2); //then Item updateItem=itemRepository.findById(item2.getId()); assertThat(updateItem.getItemName()).isEqualTo("itemB"); assertThat(updateItem.getPrice()).isEqualTo(20000); assertThat(updateItem.getQuantity()).isEqualTo(12); }
처음 강의 부분에서 main 함수를 실행시키는데 실행 결과가 이렇게 뜨면서 에러가 납니다. 그리고 HelloSpringApplicationtest.java 의 코드도 위 사진과 같이 강사님하고 다른데 뭐가 문제일까요..? +추가로 제가 직접 코드를 바꿔서 run을 실행하니까 비슷하게 된것 같긴 한데 실행 완료가 되지 않습니다.. 다 똑같이 했는데 왜이럴까요..?
사용자마다 서로 다른 세션 저장소가 생성되고 관리되는지 궁금합니다. 만약 공유된다면 session 저장소를 삭제하는 과정에서 다른 사용자의 정보도 같이 삭제되어 문제가 발생할 수도 있을 것 같습니다. 더 나아가서 HttpSession은 서블릿이 제공하는 기능이라고 하셨는데, 서블릿이 아닌 HttpServletRequest 객체의 getSession 메소드로 세션에 접근하는 이유가 궁금합니다. 세션 저장소가 사용자별로 다르기 때문에 request 객체로 이를 식별하기 위함일까요? //세션 삭제 로직 HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } LoginControllerV3에서 로그인 성공 처리과정 중에 세션에 값을 저장하고 쿠키에 세션 id를 등록하는 과정이 언제 이루어지는 것인지 궁금합니다. request.getSession으로 세션 저장소를 가져오고 session.setAttribute에서 세션에 loginMember를 저장함과 동시에 쿠키에 LOGIN_MEMBER의 이름으로 세션 id를 등록하는 걸로 이해했는데 올바르게 이해한건가요? @PostMapping("/login") public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request){ if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); log.info("login? {}", loginMember); if (loginMember == null){ bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginFrom"; } // 로그인 성공 처리 // 세션 저장소 호출, 없으면 신규 세션 생성 HttpSession session = request.getSession(); // 세션 저장소에 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); return "redirect:/"; } 감사합니다!
환경설정에서 위에 처럼 진행을 했는데 No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.7 was found. The consumer was configured to find a library for use during runtime, compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.5' but: 해당 오류가 자꾸 발생합니다. 스프링 부트도 3.2.1 이상이고 Java도 17버전 이상인데도 오류가 발생합니다...ㅠ 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의를 보다가 문득 궁금한 부분이 생겨서 질문 드립니다. int의 경우 오버플로우가 발생하면 Long 형으로 형 변환을 하면 된다고 하셨는데 double을 사용하다가 오버플로우가 발생한다면 어떻게 처리를 하는지 궁금해져서 질문드립니다. 혹시 double형을 사용하면서 오버플로우가 발생하는 상황 자체가 잘 못 된것일까요?