월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 웹 MVC
@Retention 질문
안녕하세요. 항상 잘 듣고 있습니다. 어노테이션은 계속 상속되는게 아닌가요? 그러니까 @RequestMapping 어노테이션도 @Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface RequestMapping { String name() default ""; 위 코드처럼 @Retention 이 지정되어 있으므로 @RequestMapping(method = RequestMethod.GET)public @interface GetHelloMapping { 위 같은 커스텀 어노테이션을 사용해도 자동으로 @Retention이 적용되야 하는게 아닌가 궁금합니다.
- 미해결스프링 웹 MVC
Event.builder() 관련 mac에서 lombok 문제 있으신 분들
참고한 링크 남깁니다.! https://gigas-blog.tistory.com/151 모두들 즐코하세요!!
- 해결됨스프링 웹 MVC
스프링 부트 사용시 WebMvcConfigurerSupport 클래스
항상 좋은강의 감사드립니다! spring-boot-web-starter 를 사용하면 추이적으로 JacksonJSON2 의존성이 추가되고 WebMvcConfigurerSupport 에 클래스패스에 HTTP 메세지 컨버터 관련 의존성이 있으면, DispathcerServlet 이 사용할 HTTP 메세지 컨버터로 추가해주는 기능이 구현되어 있음으로, 부트를 사용하면 추가적인 설정없이도 JacksonJSON2 HTTP 메세지 컨버터를 사용할 수 있다고 이해했습니다. 그리고, 앞선 강의에서 스프링 부트가 제공하는 자동설정을 사용하기 위한 조건에는 WebMvcConfigurerSupport 타입의 클래스가 빈으로 등록되어있지 않아야하는 조건이 있는것을 확인했습니다. 그렇다면 JacksonJSON2 HTTP 메세지 컨버터를 등록할 때 WebMvcConfigurerSupport를 사용하긴하지만 빈으로 등록하지 않고 사용하는 것이라고 이해하면 될까요? 감사합니다!
- 미해결스프링 웹 MVC
http://localhost:8080/hello 입력시 오류
항상 강의 잘 듣고 있습니다! 위와 같은 오류가 발생합니다. 위와 같이 모듈 구성되어 있고 설정은 강의 대로 했지만 톰캣은 최신버전인 10.0.2를 사용했습니다. 아래는 코드 내용입니다. <HelloServlet> package me.jinmin;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet"); resp.getWriter().println("<html>"); resp.getWriter().println("<head>"); resp.getWriter().println("<body>"); resp.getWriter().println("<h1>Hello Servlet</h1>"); resp.getWriter().println("</body>"); resp.getWriter().println("</head>"); resp.getWriter().println("</html>"); } @Override public void destroy() { System.out.println("destroy"); } @Override public void init() throws ServletException { System.out.println("init"); }} <web.xml> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>hello</servlet-name> <servlet-class>me.jinmin.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping></web-app>
- 해결됨스프링 웹 MVC
petclinic에서 @ModelAttribute 관련 질문 드립니다.
petclinic 소스 분석해보다가 이해안가는 부분이 있어 질문드립니다. PetController의 findOwner의 modelAttribute 이름값을 owner -> petOwner 로 변경했을때 는 파라미터로 바인딩이 안되는데 @ModelAttribute("owner")처럼 클래스명의 lowerCase로 이름값을 주는 경우 Owner로 파라미터로 바인딩 해서 사용할 수 있게 되는 것이 modelAttribute의 관례 같은것인지 궁금합니다. @Controller@RequestMapping("/owners/{ownerId}")class PetController { private static final String VIEWS_PETS_CREATE_OR_UPDATE_FORM = "pets/createOrUpdatePetForm"; private final OwnerRepository owners; public PetController(OwnerRepository owners) { this.owners = owners; } @ModelAttribute("owner") public Owner findOwner(@PathVariable("ownerId") int ownerId) { return this.owners.findById(ownerId); } @GetMapping("/pets/new") public String initCreationForm(Owner owner, ModelMap model) { Pet pet = new Pet(); owner.addPet(pet); model.put("pet", pet); System.out.println("owner = " + owner); return VIEWS_PETS_CREATE_OR_UPDATE_FORM; }}
- 미해결스프링 웹 MVC
핸들러 메소드 - @ModelAttribute 강의 수강 중 의문사항이 있어서 문의합니다.
아래의 내용으로 오래전에 다른 분이 질문을 남겼습니다. 최신버전 부트를 사용하고 있어서 @Valid 어노테이션을 사용하기위해 의존성은 추가했습니다. 그런데 Event 의 limit 프로퍼티에 @Min(0) 을 추가했고, mock으로 -10을 넘기는데 BindingResult 에서 에러로 잡지 못하고 그대로 넘겨주는데 제가 뭘 잘못한걸까요 아래 의존성을 추가해서 해결이 되었네요. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 이 의존성 전에 아래 의존성을 추가해서 시도했는데 @BindingResult에 에러가 바인딩 되지 않네요. 왜 안되는지 이유를 알고 싶어서 질문합니다. <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency>
- 미해결스프링 웹 MVC
마지막에 xpath 추가 후 에러발생
마지막 xpath추가하고 테스트 돌리면은 아래와같은 에러가 발생합니다. 도움부탁드립니다 org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 3; The element type "meta" must be terminated by the matching end-tag "</meta>".
- 해결됨스프링 웹 MVC
ApplicationContext 계층구조에서 빈 참조 문의드립니다.
안녕하세요. 강의를 따라해보던 중 ApplicationContext를 계층구조로 구성(.xml)하였고 아래와 같이 빈 등록을 해주었습니다. 1) rootWebApplicationContext.xml <bean id="helloService" class="..."/> 2) servletWebApplicationContext.xml <bean id="helloController" class="..."/> 그런데 컨트롤러에서 서비스를 @Autowired로 주입하고 실행하니 서비스 빈이 없다고 NullPointerException 이 발생하였습니다. 그래서 컨트롤러 생성자에서 서비스를 주입받는 형식으로 수정하고 자식 개념의 servletWebApplicationContext.xml에서 아래와 같이 수정하였더니 정상 동작하였습니다. 1) servletWebApplicationContext.xml <bean id="helloController" class="..."> <contsructor-arg ref="helloService"/> </bean> Servelet WebApplicationContext에서는 Root WebApplicationContext 빈을 참조할 수 있고, @Autowired 는 constructor-arg...를 대체하는 것으로 알고 있는데 왜 안됐던걸까요? ps. 알려주신 것처럼 component-scan 설정 시 exclude-filter, include-filter 으로 하면 역시 잘 됩니다. (.xml 기반) 개념이 많이 부족하여 기초적인 질문드립니다. 답변 부탁드립니다. ㅠㅠ
- 미해결스프링 웹 MVC
thymeleaf namespace 가 잘 인식이 안되는데요..
인텔리제이에서 프로젝트 생성할 때 thymeleaf 체크를 해서, pom.xml 에 spring-boot-starter-thymeleaf 아티팩트아이디가 추가되어 있습니다. 그런데 xmlns:th="http://www.thymeleaf.org" 추가하면 잘 인식을 못하네요.. 마우스 오버해보면, URI is not registered (Settings | Languages & Frameworks | Schema and DTDs) 해결방법이 있을까요?
- 해결됨스프링 웹 MVC
세션에서 넘어오는 데이터 바인딩
강의 3분 정도의 설명에 session 에 있는 데이터를 받아와 @ModelAttribute 의 객체에 바인딩이 가능하다고 하셔서, 테스트를 작성해봤지만 실패해 테스트를 어떻게 작성해야하는지 질문드립니다.. 제가 시도한 방법은 다음과 같습니다. <컨트롤러> @Controller public class TestController { @PostMapping("/session") @ResponseBody public Event sessionTest(@ModelAttribute Event event){ return event; } } <테스트 코드 > @WebMvcTest class TestControllerTest { @Autowired MockMvc mockMvc; @Test void sessionTest() throws Exception { MockHttpSession session = new MockHttpSession(); session.setAttribute("name", "jaden"); mockMvc.perform(post("/session") .session(session) .param("limit", "10")) .andDo(print()) .andExpect(status().isOk()); } } <실행결과> 세션을 목업해서 넘겨봤는데, 바인딩이 되지 않아 null 이 찍힙니다. 또한, 두번째로 시도한 방법은 mockMvc 에 .sessionAttr 을 넣을 수 있어서 사용해 봤습니다. <테스트코드> @Test void test2() throws Exception{ mockMvc.perform(post("/session") .sessionAttr("limit", "10") .param("name", "jaden")) .andDo(print()) .andExpect(status().isOk()); } <실행결과> 하지만 마찬가지로 바인딩이 잘 되지 않는 것 같더라구요.. 어떻게 테스트 코드를 작성해야 제대로 바인딩을 할 수 있을까요? --- 아니면 혹시, session 에서 값을 받아와 setter 를 통해 직접 바인딩 해줄 수 있기 때문에 그렇게 말씀하신걸까요? 좋은 강의 감사드립니다!
- 미해결스프링 웹 MVC
DispatcherServlet 동작 원리 1부 오타
안녕하세요!! 강의 잘 듣고있습니다. 강의자료 중 9. DispatcherServlet 동작 원리 1부 중 DispatcherServlet 동작 순서에서 핸들러의 응답처리 부분 @ResponseEntity 어노테이션이 아니라 @ResponseBody 어노테이션 아닌가요!? 좋은 강의 감사합니다!!
- 해결됨스프링 웹 MVC
Lombok builder() 안되는 분들 + spring boot
원인은 lombok 플러그인이 설치 안된거에요. Spring boot java 1.8 maven 사용 중입니다. 1) maven Dependencies에서 롬복 파일 위치에서 jar파일 찾으세요 2) source.jar 말고 jar 파일 더블클릭하면 고추모양 뭐 뜹니다. 3) 자기가 쓰는 sts specific install 한 후, sts 재부팅하면 됩니다! 아래 출처에서 도움 받았습니다.출처: https://lee-mandu.tistory.com/369 [개발/일상_Mr.lee] 출력됨
- 미해결스프링 웹 MVC
@SessionAttributes와 @ModelAttribute 질문있습니다!
--sampleController -- SampleControllerTest 핸들러 메소드 8부 강의를 듣고 있었는데 test잘 통과하던 createEvent 함수가 sampleController class에 sessionAttributes("event") 애노테이션을 붙이니깐 createEvent 함수가 실행되지 않았습니다. --console Error 여기 강의 질문에서와 구글링 해봐서 나름 찾아본 결과, ModelAttribute 애노테이션을 쓰면 sessionAttributes("event")에서 있는 지 확인해보는 데 처음에 없으면 에러를 뱉는다. 였습니다. 그래서 SampleController 클래스에서 @ModelAttribute 선언 대신에 주석 단 위치에 model.addAttribute("event") 하니깐 test 가 에러없이 통과하는 것을 확인했습니다. ModelAttribute애노테이션을 쓰면 왜 createEvent test함수가 통과하지 못 하는 이유와 이것을 다른 방법으로 해결할 수 있는 지 궁금합니다. 간단하게라도 참고사항이나 가이드 주시면 감사하겠습니다!
- 해결됨스프링 웹 MVC
Maven provided
안녕하세요 기선님 언제나 좋은 강의 감사드립니다. maven provided 동작 매커니즘에 관련해서 설명 해주셨는데, 제가 제대로 이해한게 맞는지 여쭤보려고 합니다. servlet-api dependency 를 provided 로 scope 를 설정하면 소스코드 작성시에는 관련 dependency 들을 사용할 수 있지만, war 패키징시에는 관련 dependecy 는 빠진채로 패키징이 된다. 그렇지만 해당 war 파일을 서버사이드의 톰캣 위에서 돌리게 될테니 톰캣에서 servlet-api dependecy 들을 제공해준다. 이런 매커니즘이 맞는건가요?
- 미해결스프링 웹 MVC
Validation 이 적용이 잘 되지 않습니다.
안녕하세요 기선님 언제나 좋은 강의 너무 감사드립니다! 최신버전 부트를 사용하고 있어서 @Valid 어노테이션을 사용하기위해 의존성은 추가했습니다. 그런데 Event 의 limit 프로퍼티에 @Min(0) 을 추가했고, mock으로 -10을 넘기는데 BindingResult 에서 에러로 잡지 못하고 그대로 넘겨주는데 제가 뭘 잘못한걸까요 ㅠㅠ 작성한 코드는 다음과 같습니다 테스트코드 @Testvoid createEventModel() throws Exception{ mockMvc.perform(post("/eventsModel") .param("name","event1") .param("limit", "-10")) .andDo(print()) .andExpect(status().isOk()) ;} 핸들러 @PostMapping("/eventsModel")@ResponseBodypublic Event createEventModel(@Valid @ModelAttribute Event event, BindingResult bindingResult){ if (bindingResult.hasErrors()) bindingResult.getAllErrors().stream().forEach(e -> System.out.println(e.toString())); Event event1 = new Event(); event1.setId(10); event1.setName(event.getName()); event1.setLimit(event.getLimit()); return event1;} 이벤트에 @Min 은 추가했습니다 @Min(0)private Integer limit; 다음에서 테스트를 수행해도 hasErrors()로 걸리질 않습니다..
- 미해결스프링 웹 MVC
this 질문입니다.
@ModelAttribute("owner") 사용한 메서드부분에서 this는 어떤 값을 의미하나요??
- 해결됨스프링 웹 MVC
@RequestParam
안녕하세요 강사님, @RequestParam으로 요청매개변수를 Map이외에 List, Optional 객체로도 받아 사용할 수 있다는것을 알았는데 spring 내부적에서 포멧터를 사용해 바인딩을 해주는지 궁금합니다
- 해결됨스프링 웹 MVC
메시지컨버터에 대한 궁금증..
안녕하세요, @RestController 또는 @ResponseBody를 사용하지 않고 도메인 객체를 리턴했을 때 response body에 JSON형태로 응답이 되는거 같은데 Spring 내부에서 어떻게 판단하고 동작하는지 궁금합니다. 예제 @Controller @RequestMapping(value = "/test") public class TestController { @GetMapping("/event") public User event(){ User testUset = new User(); testUset.setId(1); testUset.setEmail("test@gmail.com"); return testUset; } } 결과값 Content-Type: application/json; responseBody: {"id":1 "email":"test@gmail.com"}
- 미해결스프링 웹 MVC
안녕하세요 aop에 대해서 질문이 있습니다.
안녕하세요 강사님 강좌를 보고 난 뒤에 혼자 스프링을 공부하는데 질문이 있어서 이렇게 질문드립니다.. 1. aspectj와 spring aop는 다른 것이며 spring aop는 프록시기반이고 aspectj는 ctw나 ltw로 실행되는데 왜 spring aop로 aop적용할때도(@EnableAspectAutoJProxy를 이용하여 다이나믹프록시방식을 사용할때) aspectj에 있는 @aspect를 쓰는 것인가요?? 2. 그리고 커스텀에노테이션 선언할때 @LoginCheck를 만들때 Retention을 Runtime이아니라 Class로해도 AOP가 정상 실행이 되던데 이게 어떻게 가능한건가요? 다이나믹프록시는 런타임에 주입되니까 Runtime으로 선언해야하는거아닌가요?
- 해결됨스프링 웹 MVC
Get 요청 body에 관해서..
비동기 요청을 위해서 자바스크립트를 잠깐 배웠을때, Get으로 요청을 하면 body는 포함이 안된다고 배워서 @Requestbody를 사용할땐 늘 Post요청을 했는데 어떻게 Get으로 요청이 될 수 있는건가요??