Spring은 전달받은 파라미터를 매핑하는 여러가지 방법을 제공합니다.
1. @PathVariable
파라미터를 URL에 포함시켜 전달하는 방법입니다.
http://localhost/api/PathVariable/member/1
@GetMapping("/PathVariable/{type}/{id}")
@ResponseBody
public String pathVariableTest(
@PathVariable Integer id,
@PathVariable String type
) {
//type : member, id : 1
return "success";
}
추출할 url depth에 중괄호({})를 감싸서 매핑할 수 있습니다.
중괄호 안에 들어간 name과 @PathVariable을 선언한 변수명이 같아야합니다.
다르게 하고 싶다면 아래와 같이 작성해야합니다.
@GetMapping("/PathVariable/{type}/{id}")
@ResponseBody
public String pathVariableTest(
@PathVariable("id") Integer typeId,
@PathVariable String type
) {
//type : member, typeId : 1
return "success";
}
2. @RequestParam
key=value 형식으로 전달된 파라미터를 매핑하는 어노테이션입니다.
파라미터 전달 시 content-type은 application/x-www-form-urlencoded; charset=UTF-8;으로 해주어야합니다.
Get 방식으로 전달 할 경우 url 맨 뒤에 ?key=value 형식으로 전달되고, Post 방식일 경우 Body를 통해 전달됩니다.
1) jquery ajax
//Jquery ajax
$.ajax({
url: "/api/RequestParam",
type: "GET",
data: {
id: 1,
name: "kim",
description: "member",
address: "seoul",
active: true
},
contentType: "application/x-www-form-urlencoded; charset=UTF-8;"
});
2) Test Controller
@GetMapping("/RequestParam")
@ResponseBody
public String requestParam(
@RequestParam(required = false, value = "id") Integer memberId,
@RequestParam(required = false) String name,
@RequestParam(required = false) String description,
@RequestParam(required = false) String address,
@RequestParam(required = false) boolean active
) {
//처리..
return "success";
}
http://localhost:8080/api/RequestParam?id=1&name=kim&description=member&address=seoul&active=true
3) 모든 파라미터 한번에 받기
모든 파라미터를 한번에 받으려면 Map을 이용하면 됩니다.
@GetMapping("/RequestParam")
@ResponseBody
public String requestParam(
@RequestParam Map<String, Object> allParameters
) {
//처리..
return "success";
}
Map을 통해서 파라미터를 전달받으면 편하지만, 명확하게 어떤 파라미터를 전달받는지 모른다는 단점이 있습니다.
4) 배열 객체 넘기기
$.ajax({
url: "/api/RequestParam",
type: "POST",
data: {
arr: [1, 2, 3]
},
contentType: "application/x-www-form-urlencoded; charset=UTF-8;"
});
@PostMapping("/RequestParam")
@ResponseBody
public String requestParam(
@RequestParam(required = false, value = "arr[]") List<Integer> arr
) {
return "success";
}
5) 배열 String 넘기기
$.ajax({
url: "/api/RequestParam",
type: "POST",
data: {
arr: "1,2,3"
},
contentType: "application/x-www-form-urlencoded; charset=UTF-8;"
});
@PostMapping("/RequestParam")
@ResponseBody
public String requestParam(
// form의 input 배열을 받을 때도 아래와 같이 사용한다. ex) checkbox, multiselectbox
@RequestParam(required = false, value = "arr") List<Integer> arr
) {
return "success";
}
3. @ModelAttribute
key=value 형식으로 전달된 파라미터를 매핑하는 어노테이션입니다.
파라미터 전달 시 content-type은 application/x-www-form-urlencoded; charset=UTF-8;으로 해주어야합니다.
@RequestParam은 변수 한개씩 매핑하는 반면에 @ModelAttribute는 Object를 통해 한번에 받을 수 있습니다.
Object의 setter와 getter를 필수로 만들어주어야 합니다.
public class Member {
private Integer id;
private String name;
private String description;
private String address;
private boolean active;
private List<Integer> arr;
//setter,getter 생략
}
$.ajax({
url: "/api/ModelAttribute",
type: "GET",
data: {
id: 1,
name: "kim",
description: "super member",
address: "seoul",
active: true,
arr: "1,2,3"
),
contentType: "application/x-www-form-urlencoded; charset=UTF-8;"
});
@GetMapping("/ModelAttribute")
@ResponseBody
public Member ModelAtrribute(
@ModelAttribute Member member
) {
return member;
}
localhost:8080/api/ModelAttribute?id=1&name=kim&description=member&address=seoul&active=true&arr=1%2C2%2C3
Member Object 여러개 전송하기
public class MemberArray {
private List<Member> members;
//getter,setter 생략
}
function modelAttribute() {
var param = {};
for (var index = 0; index < 5; index++) {
param[`members[${index}].id`] = index;
param[`members[${index}].name`] = "kim";
param[`members[${index}].description`] = "description !";
param[`members[${index}].address`] = "seoul";
param[`members[${index}].active`] = true;
param[`members[${index}].arr`] = "1,2,3,4";
}
$.ajax({
url: "/api/ModelAttribute",
type: "POST",
data: param,
dataType: 'json',
contentType: "application/x-www-form-urlencoded; charset=UTF-8;"
});
}
@PostMapping("/ModelAttribute")
@ResponseBody
public Object ModelAtrributePost(
@ModelAttribute MemberArray memberArray
) {
return member;
}
4. @RequestBody
Json이나 Xml로 전송된 파라미터를 매핑할 때 사용하는 어노테이션입니다.
content-type은 application/json; UTF-8;로 해주어야합니다.
var json = {
id: 1,
name: "kim",
description: "super member",
address: "seoul",
active: true,
arr: [1, 2, 3]
};
$.ajax({
url: "/api/RequestBody",
type: "POST",
data: JSON.stringify(json),
dataType: 'json',
contentType: "application/json; UTF-8;"
});
JSON.stringify() 를 이용해 객체를 JsonString으로 변환합니다.
@PostMapping("/RequestBody")
@ResponseBody
public Member RequestBody(
@RequestBody Member member
) {
return member;
}
{"id":1,"name":"kim","description":"super member","address":"seoul","active":true,"arr":[1,2,3]}
Member Json Object 여러개 전송하기
var json = {
id: 1,
name: "kim",
description: "super member",
address: "seoul",
active: true,
arr: [1, 2, 3]
};
var jsons = [json, json, json];
$.ajax({
url: "/api/RequestBodyList",
type: "POST",
data: JSON.stringify(jsons),
dataType: 'json',
contentType: "application/json; UTF-8;"
});
@PostMapping("/RequestBodyList")
@ResponseBody
public Object RequestBodyListPost(
@RequestBody List<Member> members
) {
return members;
}
[{"id":1,"name":"kim","description":"super member","address":"seoul","active":true,"arr":[1,2,3]},{"id":1,"name":"kim","description":"super member","address":"seoul","active":true,"arr":[1,2,3]},
{"id":1,"name":"kim","description":"super member","address":"seoul","active":true,"arr":[1,2,3]}]
'IT > Spring' 카테고리의 다른 글
Spring Boot로 간단한 웹 사이트 만들기 - DB 연동 (0) | 2020.09.28 |
---|---|
Spring Boot로 간단한 웹 사이트 만들기 - 환경 구축 (0) | 2020.09.07 |
[Spring Boot] Ajax와 FormData 객체를 이용한 이미지 전송 (2) | 2020.08.18 |
[Spring Boot] Ajax를 이용해 이미지 정보를 객체 단위로 전송하는 방법 (0) | 2020.08.12 |
[Spring Boot] ConstraintValidator Custom 하기 (0) | 2020.07.09 |