본문 바로가기
Back-end/Spring Boot + REST API

Spring Boot 컨트롤러에서 데이터 받는 방법(@RequestBody, @RequestParam, @PathVariable)

by javapp 자바앱 2022. 6. 27.
728x90

@RequestBody

HttpMessageConverter에 의해 Json 포맷의 데이터 java 객체로 자동으로 역직렬화

 

예시)

Controller.java

@PostMapping("register")
@ResponseBody // return data
public String register(@RequestBody Member member)
{
...
}

 

JSP에서 ajax를 통해 통신

		var data={
			"name": $("#name").val(),
			"nickName": $("#nickname").val(),
			"password": $("#password").val(),
			"gender": $("#gender").val(),
			"email":$("#email").val(),
			"phone":$("#phone").val(),
			"interField":$("#interfield").val(),
			"address":$("#address").val(),
			"email":$("#email").val()
		}
		
		$.ajax({
			type:"post",
			url:"/register",
			contentType:"application/json;charset=utf-8",
			data:JSON.stringify(data),
			success:function(resp){
				if(resp=="success"){
					alert("성공")
					location.href="/login"
				}
				if(resp=="fail"){
					alert("이미 존재하는 사용자명입니다.")
					$("#name").focus();
					$("#name").val("");
				}
			},error:function(e){
				alert("실패: "+e)
			}
		})

 

 

Map 을 사용하여 여러 매개변수를 가지 수도 있다.

@PostMapping("busanThema")
@ResponseBody
public ResponseEntity<APIMessage> busanThema(@RequestBody Map<String, Object> pageData, Model model) throws Exception
{
    APIMessage apimsg = new APIMessage( );
    log.info((String)pageData.get("pageNo"));
    log.info((String)pageData.get("numOfRows"));
    ...
}

 

JSP

var data={
    "pageNo" : $("#pageNo").val(),
    "numOfRows": $("#numOfRows").val()
}

 

 


 

@RequestParam

쿼리스트링을 통해 넘어오는 매개변수를 추출할 수 있다.

@GetMapping("/post")
@ResponseBody
public String getPosts(@RequestParam String id) {
    return "ID: " + id;
}
/post?id=abc

 

요청 매개변수 이름 지정, 필수 속성 사용

매개변수를 지정하지 않으면 메서드 매개변수가 null 에 바인딩

@GetMapping("/post")
@ResponseBody
public String getPosts(@RequestParam(value="id", required=false) String id) {
    return "ID: " + id;
}

 

 

다중 값 쿼리스트링 매핑

@GetMapping("/post")
@ResponseBody
public String getPosts(@RequestParam List<String> id) {
    return "ID: " + id;
}
posts?id=1&id=2&id=3

 


 

@PathVariable

요청 URI 매핑에서 변수 사용

@GetMapping("tourreviewUpdateForm/{boardId}/{num}")
public String updateForm(@PathVariable int boardId, @PathVariable int num, Model model)
{
    ...
}
/tourreviewUpdateForm/1001/1

 

 

변수 이름 지정

@GetMapping("tourreviewUpdateForm/{id}/{num}")
public String updateForm(@PathVariable("id") int boardId, @PathVariable int num, Model model)
{
    ...
}

 

 

Map 사용

@GetMapping("tourreviewUpdateForm/{id}/{num}")
public String updateForm(@PathVariable Map<String,int> pathMap, Model model)
{
    int id = pathMap.get("id");
    int num = pathMap.get("num");
    ...
}

 


 

Model 객체 사용

controller

model.addAttribute("tourarea",tourarea );

 

jsp 사용

<h4 class="title">${tourarea.contentsName }</h4>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 : https://www.baeldung.com/

댓글