본문으로 바로가기

스프링 파라미터 정리

category SPRING/스프링 2022. 9. 2. 13:16
728x90
반응형
SMALL

SPRING 파라미터 정리

  • HttpServletRequest HttpServletResponse

서블릿 오브젝트들로 서블릿 정보를 담고있다.

ServletRequest, ServletResponse 타입도 사용가능

  • HttpSession

-HttpServletRequest로도 가져올수 있으며

-Http 세션만 필요한 경우 선언하여 사용

-서버에 따라 멀티스레드 환경에서 안정성이 보장되지 않기에

서버에 상관없이 안전하게 사용하려면 synchronizedOnSession 프로퍼티를 true로 설정하자

  • @PathVariable

-URL에 {}로 들어가는 패스 변수이다.

-이해하기 쉽고 보기 좋은 URL을 만들 수 있다.

-타입을 명확히 명시해야한다. 타입이 불일치 할 경우 클라이언트에 HTTP 400 -Bad Request 응답 코드가 전송될 것이다.

  • @RequestParam

-단일 HTTP 요청 파라미터를 받는 어노테이션

-String, int같은 단순 타입이면 해당 어노테이션을 생략하고 받을 수 있다. 허나 명시적으로 선언하자

  • @CookieValue

-쿠키 깂을 핸들링 할 수 있다.

ex)

public String check( @CookieValue("auth")String auth){...} )

-지정한 쿠키값이 없다면 예외가 터짐으로 디폴트 값 NONE으로 설정할 수 있다.

ex)

public String check( @CookieValue(value="auth", required=false, defaultValue="NONE")String auth){...} )

  • @RequestHeader

가져올 HTTP 헤더의 이름을 지정

  • Map, Model, ModelMap

모델 정보를 담는데 사용된다.

3개다 같은방식으로 .addAttribute() 로 사용된다.

  • @ModelAttribute

하나 이상의 값을 가진 오브젝트 형태로 만들 수 있는 구조적인 정보를 담는다.

TMI

@ModelAttribute vs @RequestParam 사용 차이점

도메인 오브젝트나 DTO의 프로퍼티 요청 파라미터를 바인딩해서 한번에 받으면 전자

요청 파라미터를 메소드 파라미터에서 1:1로 받으면 후자

@ModelAttribute 는 하나의 오브젝트에 클라이언트의 요청정보를 담아서 한 번에 전달하기 때문에 이를 커맨드 패턴에서 말하는 커맨드 오브젝트라고 부르기도 한다.

둘다 생략이 가능하기 때문에 스프링은

String, int 등은 @RequestParam 로 적용되고, 그 외이 복잡한 오브젝트는 모두 @ModelAttribute로 적용된다.

그러나 가능한 명시적으로 사용할 것을 권장된다.

@ModelAttribute vs @RequestParam 예외 차이점

@ModelAttribute는 @RequestParam과 달리 파라미터 검증작업을 추가적으로 해줘야 한다.

@ModelAttribute는 오브젝트에 요청 프로퍼티 값을 넣다가 타입 변환시 실패한다면 Http 400 응답코드가 전달되지 않는다.

발생된 예외 BindException타입의 오브젝트에 담겨서 클라이언트로 전송된다. 때문에 클라이언트에서는 오류 호출스택 정보가 노출된다. 이는 서버의 정보를 확인할 수 있기 때문에 매우 크나큰 위험이다

때문에 아래처럼 @ModelAttribute 무조건 뒤쪽에 선언해 주어 오류를 해당 메서드에서 컨트롤해주어야한다.

Errors 타입으로 선언해되 되며, 직접 명시하여 사용할 필요없이 핸들러 인터셉터를 이용하여 사용할수도있다.

@RequestMapping(value = "add", method = RequestMethod.POST)

public String add(@ModelAttribute User user, BindingResult bindingResult){...}

@RequestParam은 멀티타입을 제외하곤 문자열로 온다. 타입 변환시 실패한다면 Http 400 응답코드를 클라이언트로 전달한다.

728x90
반응형
LIST

'SPRING > 스프링' 카테고리의 다른 글

@Transactional에 대한 좋은 이해  (0) 2024.01.30
egov 3.7 에서 개발/운영/배포 설정파일 분리 운영하기  (0) 2023.08.09
스프링 JDK 버전 호환  (0) 2022.05.31
log4j2 설정 기록  (0) 2022.03.04
정리  (0) 2022.03.03