스프링 347

50. 스프링MVC 구조 전체정리.

전체 정리를 한번 해보자. 요청이 들어온다. 그러면 먼저 프론트컨트롤러에서 나에게 등록된 컨트롤러들에서 매핑을 해서 가져온다. (예를 들어 uri 등(더 많지만) 그것과 내가 등록한 컨트롤러에 등록한(이 uri로 요청이 들어오면 이걸 실행해줘~ 라고 내가 RequestMapping으로 등록한 것)이 있는지 찾아본 다음에, 있으면 그걸 가져온다. ) private void initHandlerMappingMap(Map handlerMappingMap){ handlerMappingMap.put("/front-controller/v5/v3/members/new-form",new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/..

49. 컨버터가 실행되는 위치, ArgumentResolver

여기 선 안보인다. 우리가 지금까지 컨트롤러 만든 거 보면, 예를 들어 @ResponseBody @PostMapping("/request-body-json-v2") public String requestBodyJsonV2(@RequestBody String messageBody) throws IOException { HelloData helloData = objectMapper.readValue(messageBody,HelloData.class); log.info("name={}, age={}",helloData.getUsername(), helloData.getAge()); return "ok"; } 이런 식으로 우리가 파라미터 써놓기만 하면 자동으로 누군가가 그에 맞는 인자를 넣어서 쓸 수 있게 해준..

48. HTTP 메시지 컨버터

@ResponseBody를 사용하면 viewResolve로 view의 물리 이름을 반환하는게 아니라, HttpMassageConverter가 작동한다. 이건 여러 종류의 컨버터가 있다. String 같은 문자도 있고, 객체도 있고. 보통 이렇게 2종류만 쓴다. 응답의 경우 요청의 Accept와 컨트롤러의 반환타입등을 보고 어떤 컨버터를 쓸 지 결정한다. 스프링 mvc에서는 HttpEntity라는 컨버터를 쓴다. ResponseEntity와 RequestEntity 가 있다. HttpMessageConverter인터페이스는 canRead()와 canWrite()가 있다. 이거는 읽을 수 있는건지, 또 쓸 수 있는건지 검사하는 것이다. 그리고 read()와 write()가 있다. 실제 읽고, 쓰는 것이다. ..

46. 정적 리소스, 뷰 템플릿

우선 정적 리소스는, 그냥 보여주면 된다. resource/static/경로이하 파일이름을 해주면 된다. 확장자 명은 빼도 되는데, 아마 .html이 기본으로 스프링에서 자동으로 뷰 리졸브를 해주는 모양이다. 아마도 이 확장자 명도 바꾸려면 application.properties에서 해주면 되겠지. resource/templates/ 이하의 경로 empty 위에는 "http://www.thymeleaf.org" 에 지정한 기능들을 th라는 이름으로 사용한다. empty에서 th:text="${data}"는 일단 이 태그 내부는 모델에서 data라는 키의 값으로 채운다는 뜻이다. 없으면 내가 넣어둔 empty가 그대로 된다. @Controller public class ResponseViewControl..

44. HTTP API

POST, PUT, PATCH 사용 요청파라미터, get이나 html form을 통한 것을 제외하고는 @RequestParam이나 @ModelAttribute를 쓸 수 없다. 저거 둘은 딱 저 2가지 경우에만 사용함. @Slf4j @Controller public class RequestBodyStringController { @PostMapping("/request-body-string-v1") public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); String..