Spring Framework
[Spring] Controller Parameters
헤르메스의날개
2021. 3. 2. 09:31
728x90
HttpServletRequest
@PostMapping("/receive")
public String age(HttpServletRequest request) {
String a = request.getParameter("a");
String b = request.getParameter("b");
return "result";
}
@RequestBody
1. @RequestBody애노테이션은 HTTP Request body를 읽고 HttpMessageConverter를 통해서 deserialized시켜 Handler 메소드의 특정 인자 타입의 객체로 변환하기 위한 애노테이션이다. MVC Config의 Message Converters 옵션을 사용함으로써 message conversion을 설정 및 customizing할 수 있다. javax의 @valid, spring의 @validated 애노테이션을 사용함으로써 유효성 검사를 할 수 있다. |
@PostMapping("/receive")
public String age(@RequestBody Person person) {
System.out.println("통신 성공");
System.out.println(">>> " + person);
return "result";
}
@PostMapping("/receive")
public String age(@RequestBody Map<String,String> map) {
System.out.println("통신 성공");
System.out.println(">>> " + map.get("name"));
System.out.println(">>> " + map.get("age"));
return "result";
}
@RequestParam
1. HTTP Request 파라미터를 Handler메소드의 파라미터 타입에 전달받을 때 사용하는 애노테이션이다. 2. Handler 메소드의 파라미터 타입이 Simple Type이고, 지원하는 인자 타입이 아닌 경우 @RequestParam으로 먼저 resolve되고 이후에 @ModelAttribute로 resolve된다. 3. @RequestParam이 붙여진 인자의 타입이 String이 아닌 경우 Type Conversion이 자동으로 적용된다. (사용자 정의 가능) 컨트롤러에서 @RequestMapping 을 지정한 메서드의 경우 메서드 인자에 @RequestParam 을 지정해 변수의 값을 메서드 인자로 할당 할 수 있다. |
/*
* 모든 요청 파라미터를 담은 맵으로 받을 수 있습니다.
*/
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String userJoin(@RequestParam Map<String, String> param) {
System.out.println("param : " + param);
return "index";
}
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String userJoin(@RequestParam MultiValueMap<String, String> param) {
...
}
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String userJoin(@RequestParam(value = "nonValue", required = false) String nonValue) {
System.out.println("nonValue : " + nonValue);
return "index";
}
/**
* nonValue 의 Mapping되는 값이 없으면 HTTP 400 - Bad Request 오류를 발생합니다.
* 오류를 발생하지 않기위해서는 defaultValue 를 넣어야 합니다.
*/
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String userJoin(@RequestParam("nonValue") String nonValue) {
System.out.println("nonValue : " + nonValue);
return "index";
}
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String userJoin(@RequestParam(value = "nonValue", defaultValue = "디폴트값입니다") String nonValue) {
System.out.println("nonValue : " + nonValue);
return "index";
}
@RequestBody | @RequestParam | |
객체생성 | 가능 | 불가능 |
각 변수별 데이터 저장 | 불가능 | 가능 |
@PathVariable
@PathVariable 은 메서드 인자에 사용되어 URI 템플릿 변수의 값을 메서드 인자로 할당하는데 사용된다. |
@GetMapping("/user/{userName}")
public String user(@PathVariable String userName){
System.out.println(userName);
return "index";
}
@GetMapping("/user/{age}/{name}")
public String user(@PathVariable String age, @PathVariable String name) {
System.out.println("나이는 " + age);
System.out.println("이름은 " + name);
return "index";
}
@GetMapping("/{name}")
public String user(@PathVariable Map<String,String> map) {
System.out.println(map);
return "index";
}
@GetMapping("/user/{age:\\d+}{name:\\D+}")
public String user(@PathVariable("age") String age, @PathVariable("name") String name) {
System.out.println("나이는 " + age);
System.out.println("이름은 " + name);
return "index";
}
728x90