본문 바로가기

11. Spring

[Spring]@RequestBody, @ResponseBody

@ResponseBody의 경우 JSON 형태로 데이터를 주고 받을 때 많이 사용했던거 같은데 @ReuqestBody는 생소한 느낌이 들어서 봤던 코드들이나 학원에서 했던 프로젝트를 찾아보니 없었다. 개인프로젝트를 하면서 사용한 일이 있어서 간단한 설명과 내가 구현한 코드를 예시로 정리한다.

 

 

@RequestBody

 HTTP 요청의 본문(body)을 자바 객체로 변환하는데 사용된다. 예를 들어, JSON 형식으로 전송된 데이터를 자바 객체로 매핑하는 경우에 사용.

 

@ResponseBody

 컨트롤러 메서드에서 반환되는 객체를 HTTP 응답 본문으로 변환하는 데 사용된다. 주로 메서드가 반환하는 데이터를 클라이언트에게 전송할 때 사용.

 

딱히 설명할 것도 없어서 개념만 적었다. 학원에서 부트로 프로젝트 할 때는 @RequestBody는 사용하지 않고 @RestController와 jQuery의 ajax를 사용해서 데이터를 주고 받았다.

( @RestController = @Controller + @ResponseBody )

 

 

정리하자면 (보통) JSON 형태의 데이터를 담아서 요청을 하면 해당 url에 매칭되는 컨트롤러가 그것을 받은 다음, 리턴 값이 해당 페이지가 아닌 결과값을 반환할 수 있다. 컨트롤러의 로직이 끝나면 해당 메소드의 리턴값 타입의 데이터를 반환하고, 요청을 했던 곳으로 데이터와 같이 돌아가게 된다. 재귀함수를 생각하면 좀 더 이해가 쉽지 않을까 한다.

 

게시판에 글을 쓰고 작성 완료 버튼을 눌렀을 때 구현한 코드는 다음과 같다.

jQuery 쓰기 싫어서 Promise로 구현

 

게시글에서 작성완료 버튼을 클릭 하였을 때, Validation 함수와 글 생성 요청을 보내는 함수 2개를  묶어서 사용하였는데 그 중에 글 생성 컨트롤러로 요청을 보내는 함수다.

Validation이 끝난 데이터를 Object 형태로 담은 다음 JSON으로 데이터를 변환하여 전송.

 

해당 요청을 받는 Controller (예외 처리가 너무 부실하다..)

 

클래스 자체에 @RequestMapping(value="/board") 가 붙어있다. 인자값을 보면 @RequestBody PostInfoDTO dto를 볼 수 있는데 위에서 보낸 JSON 데이터를 담는다.

VO 같은 클래스의 경우 해당하는 이름에 대한 변수가 없으면 에러가 발생한다. map 타입으로도 데이터를 받을 수 있는데 파라미터 타입을 바꿔서 실행해봤다.

 

잘 넘어온다.

map 타입으로 받으면 해당 JSON을 자동으로 map으로 매핑시켜 사용할 수 있게끔 만들어준다.

그냥 url에 때려박아서 갖고오는 경우 봤는데 별로 좋아보이진 않는것 같음.

'11. Spring' 카테고리의 다른 글

[Spring] Redis 연동해보기  (0) 2024.02.05
[Spring]Spring MVC  (0) 2023.12.01
[Spring]web.xml  (0) 2023.12.01
[Maven]pom.xml  (0) 2023.11.30
Spring 카테고리  (0) 2023.11.27