공부 기록/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-필수여부-디폴트값