스프링 MVC 애노테이션

HUSII·2023년 1월 19일
0

스프링 MVC

목록 보기
3/5
@Controller
@RequestMapping("/quizzes")
public class QuizController {

    @GetMapping("/new")
    public String createForm(
    		@RequestParam("name") String name
            Model model){
        model.addAttribute("quizForm", new QuizForm());
        return "quizzes/createQuizForm";
    }

@Controller
스프링이 자동으로 스프링 빈으로 등록한다(내부에 @Component 있음)
스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.

@RequestMapping
요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지을 수 있다.

변수들
value: 경로
consumes: Content-Type 헤더를 기반으로 미디어 타입으로 매핑
produces: Accept 헤더를 기반으로 미디어 타입으로 매핑

@GetMapping
@RequestMapping과 GET 메서드가 합쳐진 애노테이션이다.
POST 메서드인 PostMapping도 가능하다.(이외도 가능함)

클래스 단위로 @RequestMapping을 해주면 전체 URL을 통일해줄 수 있다.

@RequestMapping("/members")
public class Controller {
	@RequestMapping("/new")
    public String createMember(){ ... }
}

createMember 함수와 매핑되는 URL은
"/members" + "/new" = "/members/new"가 된다.

@RequestParam
HTTP 요청 파라미터를 위 애노테이션으로 받을 수 있다.

Model
뷰에 데이터를 전달해주는 모델을 의미한다.
model.addAttribute를 통해 모델에 데이터를 실을 수 있다.

return "quizzes/..."
뷰의 논리 이름을 반환한다.
반환한 스트링을 뷰리졸버를 통해 URL과 매핑?한다.


@Responsebody
View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력

@RestController
@Responsebody와 @Controller를 합친 애노테이션

컨트롤러 함수의 변수 애노테이션:
@PathVariable
템플릿화된 URL 경로에서 매칭 되는 부분을 편리하게 조회 가능
URL 이름이 파라미터 이름과 같으면 생략가능

@RequestHeader: 특정 HTTP 헤더를 조회한다.
(MultiValueMap 형식으로 모든 헤더 조회 가능)

@CookieValue: 특정 쿠키 조회


요청 파라미터 조회 - @RequestParam

@RequestParam("username") String name
-> request.getParameter("username")

@RequestParam String name
-> request.getParameter("name")

String name (String, int 단순 타입은 애노테이션 생략 가능)
-> request.getParameter("name")

애노테이션의 변수들
@RequestParam.required - 파라미터 필수 여부(default = true)
@RequestParam.defaultValue - 디폴트 값(빈문자도 가능)

@RequestParam의 파라미터들을 Map, MultiValueMap으로 조회 가능


HTTP 요청 파라미터 - @ModelAttribute

요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다.
이 과정을 @ModelAttribute가 자동으로 수행해준다.
@ModelAttribute도 @RequestParam처럼 생략가능하다
하지만 어떤 애노테이션인지 헷갈리기 때문에 설정된 규칙이 있다.

String, int, Integer 같은 단순 타입 = @RequestParam
나머지 = @ModelAttribute


@RequestParam과 @ModelAttribute는 요청 파라미터를 통해 전달했을때 받을수 있는 경우였다.

메시지 바디를 통해서 파라미터를 전달할때는, @RequestBody를 써야한다.

@RequestBody는 생략불가능하다.

profile
공부하다가 생긴 궁금한 것들을 정리하는 공간

0개의 댓글