공부 기록/Java

[Spring Boot] @RequestParam 사용하기

뵤옹 2023. 6. 29. 15:02

프로젝트를 진행하면서 React 프론트 서버에서 Spring Boot 백엔드 서버로 데이터를 전달하였다.

이전까지는 기능이 잘 작동했는데(이때는 데이터를 전달하고 받는 것이 아니라 호출하여 받아오는 기능이었다!) 왜 에러가 나는지 이해할 수 없었다.

 

문제는 이전에도 비슷하게 React와 Spring을 함께 사용한 프로젝트를 진행했었는데 당시에는 get 방식이 아니라 post 방식으로 데이터를 주고 받았기 때문에 데이터를 주고받는 방식이 달라 발생한 문제였다.

* post 방식으로 데이터를 받을 경우
@RequestBody 어노테이션을 붙여 데이터를 받아온다.
Map<String, Object>와 같이 Map을 사용해서 데이터를 key-value 형태로 받아올 수 있다.

 

Get 방식을 사용할 경우? @RequestParam을 사용

SearchTag.js

    const searchTagBtn = (inputValue) => {
        axios.get('/searchTag', { 
            params: {
                site: inputValue.site,
                createDate: inputValue.createDate,
                tagSeq: inputValue.tagSeq,
            }
        })
        .then(res => {
            if(res.data.code === '2000') {
                onDataChange(res.data.result)
            } else {
                console.log('검색 실패')
            }
        })
        .catch(error => {
            console.log(error)
            console.log(inputValue)
        })
    }

 

tagController.java

    @GetMapping("/searchTag")
    public ResponseBody<List<Tag>> searchTag(@RequestParam("site") long site,
                                             @RequestParam("createDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime cd,
                                             @RequestParam(value = "tagSeq", defaultValue = "0") long tagSeq) {

        // 필요한 로직 작성
    }

@RequestParam을 사용하여 데이터를 받아올 때

@RequestParam("name 값") (데이터를 받을 변수) 형식으로 작성한다.

 

@RequestParam에 옵션을 주어 데이터를 받아올 수도 있다.

  • defaultValue
    : 파라미터 값이 없을 경우, default로 들어갈 값을 설정할 수 있다.
  • required = false
    : 기본적으로는 true로 설정되어 있다. false로 설정하면 파라미터 값이 필수가 아니며 파라미터 값이 없을 경우 null로 값이 들어간다.

 


[ 참고 ]

https://velog.io/@seulki412/Spring-Boot-RequestParam-파라미터-값-받기-required-defaultValue-필수여부-디폴트값