[TIL] 6월 27일]

김동규·2023년 6월 27일
0

@RequestParam

Controller에서 Requestparam으로 파라미터 값을 넘겨받을 때 사용하는 어노테이션
Client에서 요청이 들어왔을 때 Body 부분을 받아줄 수 있다.

Ex.

@RequestParam 어노테이션은 생략이 가능하다. -> (String name, int age)처럼 @RequestParam 어노테이션을 붙이지 않고도 값을 제대로 가져온다.

(" required=false ")

해당 기능은 Key값이 없을 경우에 대비해서 추가한다.

Ex. (@RequestParam String name, int age) 에서 name이나 age에 대한 key값 둘 중 하나가 빠질 경우 에러가 나는데

(@RequestParam(required = false) String name, int age) 으로 줄 경우 name 에 해당하는 key값이 빠져도 정상적으로 실행된다.

대신 name에 대한 key값이 빌 경우 value 값으로는 null이 들어가게 된다.

@ModelAttribute

body 부분에 들어온 QueryString 방식의 데이터를 객체에 Mapping 하여 가져오게 하는 어노테이션

@RequestParam 어노테이션의 경우 데이터가 늘어날 때 마다 계속해서 파라미터를 추가해야하기 때문에 @ModelAttribute처럼 객체에 Mapping하여 가져오는게 유지 보수 면에서 훨씬 효율적이다.

주의할점

@ModelAttribute를 통해서 데이터를 객체로 받아오기 위해서는 해당되는 클래스에 @Setter 또는 오버로딩된 생성자가 있어야 한다 → 각 값에 맞는 파라미터를 가진 생성자가 있어야 함

만일 해당 파라미터가 없을 경우 Default 값이 들어간다 (String 의 경우 null, int의 경우 0 등...)

@ModelAttribute 생략

@ModelAttribute 파라미터는 생략이 가능하다.

생략 전


생략 후

생략하기 전과 후 모두 Data값을 객체로 잘 받아와진다.

@RequestParam과 @ModelAttribute 각각 생략이 가능한 이유

SpringBoot는 매개변수(Parameter)가 Simple Value Type 이면 @RequestParam으로 간주하고 아니라면 @ModelAtrribute가 생략이 되었다고 판단한다.

Simple Value Type이란?

int 와 같은 원시타입
Integer 와 같은 Wrapper 타입
Date 와 같은 타입

이러한 것들이 매개변수 값으로 들어갈 경우 @RequestParam이 생략된 것으로 판단하고 이 외에는 @ModelAttribute가 생략 되었다고 Spring은 판단한다.

RequestBody

http Body부분에 Json 형식으로 데이터가 넘어왔을 때 데이터를 처리하기 위한 Class를 만들어서 매개변수에 넣어주고 @RequestBody 어노테이션을 달아줌으로써 처리할 수 있다.

처리가 가능한 이유 Jackson 라이브러리에서 이를 해결해주고 있다.

profile
안녕하세요~

0개의 댓글