로그 레벨 설정application.properties
# 전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug
@RequestParam
@RequestParam
: 파라미터 이름으로 바인딩@RequestParam
의name(value)
속성이 파라미터 이름으로 사용@RequestParam("username") String memberName
String memberName = request.getParameter("username")
- 파라미터 이름이 변수 이름과 같으면
name
속성 생략 가능 String
,int
,Integer
등의 단순 타입이면@RequestParam
생략 가능- 어노테이션 생략시 내부에서
required=false
적용, 어노테이션 적용시required=true
가 기본값 - 파라미터 값이 여러개라면
MultiValueMap
사용 @RequestParam MultiValueMap<String, Object> paramMap
required=true
인 경우, 해당 파라미터를 너기지 않은 경우 400 예외 발생- 파라미터 이름만 있고 값이 없는 경우는 빈문자로 통과함
- 기본형(primitive)에
null
입력시 500 예외 발생 @RequestParam(required=false) int age
에null
사용 불가 ->Integer
로 변경,defaultValue
사용defaultValue
는 빈 문자의 경우에도 적용됨
@ResponseBody
@RequestMapping("/request-param")
public String requestParam(
@RequestParam(name = "username") String memberName,
@RequestParam String username,
@RequestParam(name ="age", defaultValue = "-1") int memberAge,
Integer age,
@RequestParam(required = true) boolean required,
@RequestParam MultiValueMap<String, Object> paramMap) {
log.info("memberName={}", memberName);
log.info("username={}", username);
log.info("memberAge={}", memberAge);
log.info("age={}", age);
log.info("required={}", required);
log.info("paramMap={}", paramMap);
return "ok";
}
실행결과http://localhost:8080/request-param?username=hello&required=true&test=123&test=456
2022-01-18 23:30:30.903 INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController : memberName=hello
2022-01-18 23:30:30.903 INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController : username=hello
2022-01-18 23:30:30.903 INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController : memberAge=-1
2022-01-18 23:30:30.903 INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController : age=null
2022-01-18 23:30:30.903 INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController : required=true
2022-01-18 23:30:30.903 INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController : paramMap={username=[hello], required=[true], test=[123, 456]}
@ModelAttribute
- 요청 파라미터의 이름으로 객체의 프로퍼티를 찾아 해당 프로퍼티의
setter
를 호출 -> 파라미터의 값 바인딩 - 숫자가 들어가야할 부분에 문자를 넣으면
BindException
발생 @ModelAttribute
는 생략 가능@RequestParam
도 생략 가능하므로 혼란이 발생할 수 있음String
,int
,Integer
같은 단순 타입은@RequestParam
으로 매핑- 나머지 =
@ModelAttribute
(argument resolver로 지정해둔 타입 외)
@Data
public class HelloData {
private String username;
private int age;
}
@ResponseBody
@RequestMapping("/model-attribute")
public String modeAttribute(@ModelAttribute HelloData helloData) {
log.info("helloData={}", helloData);
return "ok";
}
실행결과http://localhost:8080/model-attribute?username=hello&age=24
2022-01-18 23:46:12.437 INFO 15100 --- [nio-8080-exec-4] h.s.w.s.basic.RequestHeaderController : helloData=HelloData(username=hello, age=24)
'Backend' 카테고리의 다른 글
[Spring] 다양한 의존관계 주입 방법 (0) | 2022.01.29 |
---|---|
[Spring] 스프링 컨테이너와 스프링 빈 (0) | 2022.01.25 |
[Spring] MVC 패턴 (0) | 2022.01.16 |
[Spring] MVC 패턴의 등장 (0) | 2022.01.15 |
[Spring] HttpServletRequest와 HttpServletResponse 다루기 (0) | 2022.01.11 |