일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- MVC2
- Model1
- @RestController
- select
- 자바
- order by
- 세션
- 서블릿
- JSP
- STS
- 인프런
- SQL
- @Controller
- 김영한
- 스프링
- 서브쿼리
- 코테
- 인텔리제이
- AOP
- 코딩테스트
- 프로그래머스
- MVC
- 메이븐
- 프레임워크
- 뉴렉처
- Join
- 기술 대비
- toUpperCase
- DDL
- Model2
- Today
- Total
Heestory
05.Spring-MVC)기본 기능 본문
@RestController : 반환 값으로 HTTP메시지 바디에 바로 입력
@Controller : 반환 값이 String이면 뷰 이름으로 인식, 뷰를 찾고 뷰가 렌더링
+@ResponseBody 추가하면 @RestController 역할 가능
@RequestMapping
- 다중 설정이 가능하며, 배열로 제공
- method를 별도 지정하지 않으면 HTTP 메서드와 무관하게 모두 허용
@PathVariable(경로변수) 사용
:이름과 파라미터 이름이 같으면 생략할 수 있다.
consumes , produces
- consumes : 클라이언트가 서버에서 보내는 데이터 타입, Request Body에 담는 타입을 제한
- produces : 서버가 클라이언트에게 반환하는 데이터 타입
@RequestParam
- @RequestParam("username") String memberName = request.getParameter("username")
- HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam(name="xx")생략 가능
- String, int , Integer 등의 단순 타입이면 @RequestParam 생략 가능
- required=true 명시할 경우 파라미터 필수
- 파라미터 이름만 있고 값이 없는 경우는 빈문자(" ")로 통과, NULL과 다르다! - 기본형 null 입력시 Integer나 dafaultValue를 사용하자
@ModelAttribute
- 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다.
- String, int, Integer과 같은 단순 타입을 제외한 경우 사용
HTTP 요청 메시지 - 단순메시지
HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용, JSON, XML, TEXT
- 데이터 형식은 주로 JSON 사용
- POST, PUT, PATCH
HTTP 메시지 바디에 직접 조회 및 출력 : InputStream(Reader) / OutputStream(Writer)
HttpEntity
- HTTP header, body 정보를 편리하게 조회, 바디 정보를 직접 조회
- 요청 파라미터를 조회하는 기능과 관계 없음(@RequestParam, @ModelAttribute)
- RequestEntity, ResponseEntity 기능 제공
@RequestBody (생략 불가)
HTTP 메시지 바디 정보를 편리하게 조회
헤더 정보가 필요할 땐 HttpEntity 사용하거나 @RequestHeader 사용
@ResponseBody (생략 불가)
응답 결과를 HTTP 메시지 바디에 직접 담아서 전달, 이 경우에도 view를 사용하지 않는다.
HTTP 요청 메시지 - JSON
: 문자로 된 JSON 데이터를 Jackson 라이브러리인 objectMapper를 사용해서 자바 객체로 변환
- @RequestBody 요청
JSON 요청 → HTTP 메시지 컨버터 → 객체 - @ResponseBody 응답
객체 → HTTP 메시지 컨버터 → JSON 응답
HTTP 응답 - 정적 리소스, 뷰 템플릿
- 정적 리소스 : 웹 브라우저에 정적인 HTML, css, js를 제공할 때, 정적 리소스를 사용
/static, /public, /resources, /META-INF, /resources - 뷰 템플릿 src/main/resources/templates
String을 반환하는 경우 @ResponseBody가 없으면 뷰 리졸버가 실행되어서 뷰를 찾고 렌더링 한다.
Void를 반환하는 경우 : HTTP 메시지 바디를 처리한느 파라미터가 없으면 요청 URL을 참고해서 논리 뷰 이름으로 사용
HTTP 응답 - HTTP API, 메시지 바디에 직접 입력
HTML이 아닌 데이터를 전달해야하므로 JSON과 같은 데이터를 실어 보낸다.
@RestController : @Controller + @ResponseBody
Rest API(HTTP API)를 만들 때 사용하는 컨트롤러
요청 파라미터 vs HTTP 메시지 바디
- 요청 파라미터를 조회하는 기능 : @RequestParam, @ModelAttribute
- HTTP 메시지 바디를 직접 조회하는 기능 : @RequestBody
HTTP 메시지 컨버터
1.사용되는 경우
HTTP 요청 : @RequestBody, HttpEntity(RequestEntity)
HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity)
2.대상 클래스와 미디어 타입(content-type) 체크
3.일치하면 read() 호출해서 객체 생성 및 반환 / wrtie()를 호출해서 HTTP 응답 메시지 바디에 데이터를 생성
요청 매핑 헨들러 어뎁터 구조
애노테이션 기반의 컨트롤러는 다양한 파라미터를 사용하게 함
ArgumentResolver
컨트롤러(핸들러)가 필요로 하는 다양한 파라미터의 값(객체)를 생성
→ 파라미터의 값이 모두 준비되면 컨트롤러를 호출하면서 값을 넘겨준다.
이때 HTTP 메시지 컨버터를 사용해서 필요한 객체를 생성
ReturnValueHandler : 응답값을 반환하고 처리
로그
- 올바른 사용법
log.debug("data+"+data) X
log.debug("data={}",data) : 불필요한 연산이 발생하지 않아 이렇게 쓴다 - 로그 사용시 장점
- 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고 , 출력 모양을 조정 할 수 있다.
- 로그 레벨에 따라 개발 서버는 모든 로그를 출력하고, 운영 서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.
- 시스템 아웃 콜솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다.
- 일반적으로 System.out 보다 성능이 좋다. - 로글 레벨 : TRACE > DEBUG > INFO > WARN > ERROR
'개발(~국비) > Spring' 카테고리의 다른 글
2.타임리프-스프링 통합과 폼 (0) | 2022.11.17 |
---|---|
01.Spring-MVC2)타임리프-기본기능 (0) | 2022.11.14 |
04.Spring-MVC)MVC 구조의 이해 (0) | 2022.11.04 |
03.Spring-MVC)MVC 프레임워크 만들기 (0) | 2022.11.02 |
02.Spring MVC)서블릿,JSP,MVC 패턴 (0) | 2022.11.01 |