Controller에서 데이터를 받는 방법

김민창·2022년 2월 27일
0
post-thumbnail

프론트에서 넘어온 데이터를 Controller에서 처리하는 방법

  • RequestParam
  • PathVariable
  • requestBody
  • RequestPart

RequestParam

  • 전달받은 데이터를 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에서 확인하면 다음과 같다

PathVariable

  • 받을 매개변수가 노출이 되어도 상관이 없고, 하나일경우 보통 사용하는 어노테이션
  • 형태는 /API/{value}와 같다

  • 형태에서 보이듯 하나의 파라미터가 넘어올 수 있으며, RequestParam과 같이 required = false를 추가하여 값이 안들어오더라도 400 에러를 피할 수 있다

@GetMapping("/alarm/{alarmSeq}")
public void alarmRead(@PathVariable int alarmSeq) {
		
	...

		
}
  • Swagger에서 확인하면 다음과 같다

RequestBody

  • 주고받는 데이터가 직접 URI에 노출되지 않으며, 데이터가 많아 JSON 형식으로 묶어서 보낼때 보통 사용하는 어노테이션

  • Bodydata를 담아서 보내게 된다

  • 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에서 확인하면 다음과 같다

RequestPart

  • DTO 내부에 파일과 다른 데이터를 함께 보내려하니 415 Unsupported Media Type 에러가 발생했다

  • 파일과 DTO를 함께 받기 위해서는 @RequestPart 어노테이션을 사용했다

  • 파일은 MultipartFile[] 형태였고, DTORequestBody에서 사용하는것과 동일하게 사용했다

// 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에서 확인하면 다음과 같다
  • 그리고 해당 objectjson형태로 받아야 한다
  • 프론트에서 보내는법은 추후 기술하도록 하겠다

profile
개발자 팡이

0개의 댓글