프론트에서 넘어온 데이터를
Controller
에서 처리하는 방법
RequestParam
PathVariable
requestBody
RequestPart
전달받은 데이터를 URI에 담아 보낸다
형태는 /API?key1=value1&key2=value2
와 같다
두개 이상의 파라미터를 넘길때 사용했다(하나는 PathVariable
사용했음)
쿼리스트링의 갯수만큼 Controller
매개변수를 @RequestParam
어노테이션과 함께 선언
required
가 기본으로 true
이기 때문에 해당 파라미터가 들어오지 않는다면 400 에러가 발생
꼭 들어오지 않아도 된다면 required = false
를 추가해주며, 사용 예시는 다음과 같다
@GetMapping("/categorys")
public void categoryList(@RequestParam String order,
@RequestParam(required = false) String searchText) {
...
}
Swagger
에서 확인하면 다음과 같다형태는 /API/{value}
와 같다
형태에서 보이듯 하나의 파라미터가 넘어올 수 있으며, RequestParam
과 같이 required = false
를 추가하여 값이 안들어오더라도 400 에러를 피할 수 있다
@GetMapping("/alarm/{alarmSeq}")
public void alarmRead(@PathVariable int alarmSeq) {
...
}
Swagger
에서 확인하면 다음과 같다주고받는 데이터가 직접 URI에 노출되지 않으며, 데이터가 많아 JSON
형식으로 묶어서 보낼때 보통 사용하는 어노테이션
Body
에 data
를 담아서 보내게 된다
Controller
에서는 RequestParam
처럼 여러 파라미터를 따로 처리할 수 있지만, 나는 dto
로 받아야 하는 데이터들을 모아 JSON
형태로 통신하였다
// FollowRequest.java
@Getter
@AllArgsConstructor
@ToString
public class FollowRequest {
private int follower;
private int followee;
}
@RequestBody
어노테이션을 사용하면 dto
에 해당하는 데이터들을 json
형태로 받을 수 있다 @PostMapping("/follow")
public void followRequest(@RequestBody FollowRequest request) {
...
}
Swagger
에서 확인하면 다음과 같다DTO
내부에 파일과 다른 데이터를 함께 보내려하니 415 Unsupported Media Type
에러가 발생했다
파일과 DTO
를 함께 받기 위해서는 @RequestPart
어노테이션을 사용했다
파일은 MultipartFile[]
형태였고, DTO
는 RequestBody
에서 사용하는것과 동일하게 사용했다
// tmpDTO.java
@Getter
@AllArgsConstructor
@ToString
public class SendCharacterCreateRequest {
private int userSeq;
private int categoryNumber;
private String nickname;
private String introduction;
}
// Controller
@PostMapping("/")
public void createCharacter(@RequestPart(value="file") MultipartFile[] file,
@RequestPart(value="request") tmpDTO request) {
...
}
Swagger
에서 확인하면 다음과 같다object
는 json
형태로 받아야 한다