Spring - Annotation

주빈·2022년 6월 30일
0

framework

목록 보기
7/11
post-thumbnail
post-custom-banner

오늘은 Spring에서 요청과 파라미터에 관련된 어노테이션에 대해 알아보자.

📘 Annotation


📜 @RequestMapping

  • 클라이언트 요청(URL)에 맞는 클래스나 메서드를 연결시켜주는 어노테이션이다.

✏ 위치에 따른 해석

  • 클래스 레벨 : 공통 주소(프론트 컨트롤러 패턴을 지정)
  • 메서드 레벨 : 공통 주소 외 나머지 주소

✅ 단, 클래스 레벨에 @RequestMapping이 존재하지 않으면 메서드 레벨의 해석이 달라진다.
-> 메서드 레벨 : 단독 요청 처리 주소

✏ 작성법에 따른 해석

  • @RequestMapping("url")
    • 요청 방식(GET/POST) 관계 없이 url이 일치하는 요청을 처리한다.
  • @RequestMapping(value = "url", method = RequestMethod.GET | POST)
    • 요청 방식에 따라 요청을 처리한다.
  • 메서드 레벨에서 GET / POST 방식을 구분하여 매핑할 경우 (메서드 레벨에서만 작성 가능 !!)
    @GetMappring("url")
    @PostMapping("url")

📜 @RequestHeader

  • Request의 header 값을 가져올 수 있으며 해당 어노테이션을 쓴 메서드의 파라미터에 사용한다.
@Controller                   // 이 Class는 Controller 역할
@RequestMapping("/member")      // 이 Class는 /member 들어오는 요청을 모두 처리
public class UserController {

    @RequestMapping(method = RequestMethod.GET)
    public String getUser(@RequestHeader(value="Accept-Language") String acceptLanguage) {
        //  GET method, /user 요청을 처리
    }
}

📜 @RequestBody

  • 이 어노테이션이 붙은 파라미터에는 http 요청의 본문(body)이 그대로 전달이 된다.
  • 일반적인 GET / POST의 요청 파라미터라면 @RequestBody를 사용할 필요가 없다.
    반면에 XML이나 JSON 기반의 메세지를 사용하는 요청의 경우엔 이 방법이 유용하다.
  • HTTP 요청의 바디 내용을 자바객체로 변환해서 매핑된 메서드 파라미터로 전달해준다.

📜 @ResponseBody

  • 컨트롤러에서 반환되는 값은 일반적으로 forward 또는 redirect 방식의 경로이다(반환되는 값이 경로로 인식됨).
  • 이를 해결하기 위해서 이러한 반환되는 값을 경로가 아닌 값으로 인식하게 해주는 @ResponseBody가 존재한다.
  • 반환되는 값을 응답의 Body에 추가하여 이전 요청 주소로 돌아간다.
    이는 컨트롤러에서 반환되는 값이 경로가 아닌 "값 자체"로 인식이 된다.

📜 @RequestParam

  • 클라이언트 요청 시 같이 전달된 파라미터를 변수에 저장하는 어노테이션이다.
    어떤 파라미터를 변수에 저장할지는 "name 속성 값"을 이용해서 지정한다.
@RequestParam("name속성값") 자료형 변수명

✅ "name속성값"과 변수명이 같으면 @RequestParam을 생략할 수 있다.
✅ 매개변수 지정 시 데이터 타입의 파싱을 자유롭게 진행할 수 있다.

ex) String -> int 로 변환

@RequestParam("memberNo") String memberNo
@RequestParam("memberNo") int memberNo

✏ 속성

value

input 태그의 name 속성 값(속성을 하나도 적지 않은 경우의 기본값)
@RequestParam("inputEmail") == @RequestParam(value="inputEmail")

required

입력된 name 속성 값이 필수적으로 파라미터에 포함되어야 되는지를 지정
required = true (기본값) / required = false
required = true 일 때 파라미터가 없으면 -> 400 잘못된 요청(Bad Request) 발생
required = false 일 때 파라미터가 없으면 -> null

defaultValue

required가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정한다.

ex)

@RequestParam(value="inputName", required = false, defaultValue = "홍길동" ) String name

📜 @ModelAttribute

  • 파라미터 중에 name 속성 값이 VO의 필드와 일치하면 해당 VO 객체의 필드에 값을 세팅한다.
@ModelAttribute VO타입 변수명

✏ 주의사항

@ModelAttribute를 이용해서 객체에 값을 직접 담을 때의 주의사항이 있다.

  • VO에 다음 내용이 반드시 작성이 되어있어야 한다!
    • 기본 생성자
    • 필드에 대한 Setter

Getter는 JSP - EL 사용 시에 반드시 필요하다.

profile
누구에게나 필요한 개발자가 꿈
post-custom-banner

0개의 댓글