본문 바로가기
Spring

Controller에서 여러 인자를 받는 방법

by asdft 2024. 3. 5.

@RequestParam은 말 그대로 요청 파라미터를 받아올 때 사용하는 어노테이션입니다. 여러 개의 변수를 받아와야 할 때는 Map 또는 List 형식으로 받아와야 하는 것은 아니며, 컨트롤러 메서드의 인자에 각각 변수명을 지정해줘서 받아올 수 있습니다.

예를 들어, 아래와 같이 컨트롤러 메서드를 작성할 수 있습니다.

@GetMapping("/example")
public String getExample(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
  // param1과 param2를 이용한 로직 처리
  return "example";
}

 

이렇게 작성하면 요청 URL에 “param1”과 “param2”라는 파라미터가 전달될 때, 각각의 값을 String 형태로 받아와서 사용할 수 있습니다.

그러나, 변수 개수가 많아지면 @RequestParam을 일일히 다 적어주는 것이 번거로울 수 있습니다. 이럴 때는 DTO(Data Transfer Object)라는 개념을 사용하여 하나의 객체로 파라미터를 받아올 수 있습니다.

 

아래는 

 

public class PostSaveController {

  private final PostSaveUseCase PostSaveUseCase;

  @PostMapping("/posts")
  public ResponseEntity<Object> postSave(
      @RequestBody @Valid PostSaveRequestDto postSaveRequestDto,
      @AuthenticationPrincipal UserDetails userDetails) { //사용자 입력 정보

    long userId = Long.parseLong(userDetails.getUsername());

    Post savedPost = PostSaveUseCase.createPost(
        postSaveRequestDto.toCommand(userId));

    URI location = ServletUriComponentsBuilder.fromCurrentRequest()
        .path("/{id}")
        .buildAndExpand(savedPost.getId())
        .toUri();

    return ResponseEntity.created(location).build();

  }