티스토리 뷰
RequestMapping #1
@RequestMapping
- Handler와 adapter 둘다 우선적으로 사용되는 부분이 RequestMapping 이다
- RequestMappingHandlerMapping
- RequestMappingHandlerAdapter
@RequestMapping 사용
@Controller
//@RequestMapping("/main") 을 하면 해당 메서드에 붙은 /main 부분을 생략할 수 있다
public class SpringExampleControllerV1{
@RequestMapping("/main/new-form")
public ModelAndView process(){
return new ModelAndView("new-form");
}
@RequestMapping("/main/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response){
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mv = new ModelAndView("save-result");
mv.addObject("member", member);
return mv;
}
@RequestMapping("/main")
public ModelAndView members(){
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members);
return mv;
}
}
- @Controller
- Spring에 컨트롤러(=핸들러)이라는 것을 Mapping 시켜준다
- RequestMappingHandlerMapping 이 해당 annotaion을 보고 매핑정보로 인식
- @RequestMapping("[URL]")
- 해당 URL을 통해서 들어온 요청을 받고 해당 method를 실행시킨다
- ModelAndView 반환
- ModelAndView를 반환하여 Dispatch Servlet의 doDispatch() 과정을 통해 view를 렌더링한다
실용적인 코드로 수정
@Controller
@RequestMapping("/main")
public class SpringExampleControllerV1{
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String process(){
return "new-form";
}
@PostMapping("/save")
public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model){
Member member = new Member(username, age);
memberRepository.save(member);
//post로 들어온 요청의 결과값을 전송하기 위해 Model 사용
model.addAttribute("member", member);
return "save-result";
}
@GetMapping()
public String members(Model model){
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
- Spring의 지원 파라미터
- Model 파라미터를 사용해서 데이터의 처리 및 전달을 사용할 수 있다
- HttpServlerRequest, HttpServletResponse
- @RequestParam 을 사용하여 파라미터를 얻을 수 있다 ( request.getParameter() 대신해서 사용 가능 )
- ViewName 직접 반환
- view의 논리이름을 반환할 수 있다 ( viewResolver() 에서도 지원 하기 때문 )
- @RequestMapping
- @GetMapping , @PostMapping을 통해서 HTTP Method도 구분이 가능하다
- 똑같은 path를 사용하여 HTTP Method 만 다르게 해서 API 구현 가능
- 주의) HTTP Method를 지정하지 않고 @RequestMapping 만 사용할경우 모든 Http Method를 허용하게 된다
- @RequestMapping 사용법
- Original
- @RequestMapping(value = "/main", method=RequestMethod.GET)
- Alias 로 표현
- @GetMapping("/main)
- 나머지 HTTP method도 동일하게 적용된다
- method가 지정되어있는데, 다른 method가 요청하면 405 Error를 발생시킨다
- Original
@PathVariable
- 경로에 포함된 변수 값을 파라미터로 사용할 수 있게 하도록 도와주는 annotaion
- PathVariable 은 다중으로도 사용이 가능하다
- PathVariable의 경우 파라미터 변수명과 URL 변수명이 같을경우 생략이 가능하다
//RestController를 사용하면 return 값의 텍스트를 view이름이 아니라, 단순히 텍스트로 보고 Http Message에 그대로 전달한다
@RestController
public class Example{
@GetMapping("/main/{userId}/{orderId}")
public String mapping(@PathVariable("userId") String data, @PathVariable("orderId") int data2){
log.info("mapping userId = {}", data);
return "ok"
}
@GetMapping("/main/{userId})
public String mapping(@PathVariable String userId){
log.info("mapping userId = {}", data);
return "ok"
}
}
조건 mapping
- 특정 파라미터 조건 매핑
@GetMapping(value="/main", prams= "mode=debug")
- 특정 헤더 조건 매핑
@GetMapping(value = "/main", headers = "mode=debug")
- media Type 조건 매핑
- consumes 예시
- consumes = "text/palin"
- consumes = {"text/plain", "application/*"}
- consumes = MediaType.TEXT_PLAIN_VALUE
- consumes 예시
@PostMapping(value="/main", consumes = "application/json")
- media Type 조건 매핑 (Accept, produce)
- produces = "text/html"
- produces = "!text/html"
- produces = "text/*"
- produces.= " *\/*"
@PostMapping(value = "/main", produces = "text/html")
HTTP 요청 - 기본, 헤더 조회
@Slf4j
@RestController
public class RequestHeaderController{
@RequestMapping("/main")
public String headers(HttpServletRequest request, HttpServletResponse response,
HttpMethod httpMethod, Locale locale,
@RequestHeader("host") String host,
@CookieValue(value="myCookie", required=false) String cookie){
log.info("request={}", request);
log.info("response={}", response);
log.info("httpMethod={}", httpMethod);
log.info("locale={}", locale);
log.info("headerMap={}", headerMap);
log.info("host={}", host);
log.info("cookie={}", cookie);
return "ok";
}
}
- @RequestHeader("[특정헤더]")
- 필수값 여부 : required
- 기본값 속성 : defaultValue
- @Cookievalue
- 특정 쿠키를 조회한다
- 필수값 여부 : required
- 기본값 : defaultValue
- MultiValueMap
- 특정 URL 혹은 Key에 여러개의 value가 들어갈경우 사용
MultiValueMap<String, String> map = new LinkedMultiValueMap();
map.add("keyA", "value1");
map.add("keyA", "value2");
List<String> values = map.get("keyA");
'백엔드 > SPRING MVC' 카테고리의 다른 글
Spring MVC (Http 요청 처리) (0) | 2024.09.01 |
---|---|
Log 설정 및 Logging 사용 (0) | 2024.09.01 |
SPRING MVC 구조 #3 (Dispatcher Servlet, View) (0) | 2024.09.01 |
SPRING MVC 구조 #2 (Dispatcher Servlet, handler Adapter) (0) | 2024.09.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 예외처리
- 버블정렬
- 티스토리챌린지
- 기술면접
- 클래스
- Spring
- BFS
- JDBC
- 백준
- HTML5
- Thymeleaf
- 오블완
- 포트폴리오
- bean
- SQL
- 타입변환
- 게시판
- 정렬
- JSON
- Java
- DFS
- db
- 코딩테스트
- 게시판 프로젝트
- 깊이우선탐색
- stack
- 검증
- 이진탐색
- 우선순위 큐
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함