로그 레벨 설정application.properties
# 전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug
@RequestParam
@RequestParam: 파라미터 이름으로 바인딩@RequestParam의name(value)속성이 파라미터 이름으로 사용@RequestParam("username") String memberNameString memberName = request.getParameter("username")
- 파라미터 이름이 변수 이름과 같으면
name속성 생략 가능 String,int,Integer등의 단순 타입이면@RequestParam생략 가능- 어노테이션 생략시 내부에서
required=false적용, 어노테이션 적용시required=true가 기본값 - 파라미터 값이 여러개라면
MultiValueMap사용 @RequestParam MultiValueMap<String, Object> paramMaprequired=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 |