@ResponseBody & @RequestBody

이수보🧑🏻‍💻·2022년 2월 23일
2

SPRING

목록 보기
2/2

@ResponseBody & @RequestBody

@ , Request, Response로 알 수 있듯이 위 둘은 스프링 어노테이션이며 요청과 응답에 관한 것이란 것을 알 수 있다. 두 어노테이션은 스프링 비동기 처리를 하는 경우 사용한다.


  • 왜 필요할까?
    예를 들어 웹페이지에서 json으로 요청한 파라미터를 java에서 받으려면 java Object로의 변환이 일어나야 하고 또한 response 시에도 java Object를 json으로 변환이 필요하다.
    위 역할을 해주는 것이 ResponseBody / RequestBody이다. 두 어노테이션을 통해 JSON이나 key/value, XML 형태로 데이터를 송수신 할 수 있다.


  • 요청과 응답

클라이언트가 서버로 통신하는 메시지를 요청(Request)이라고 하며 반대로 서버가 클라이언트로 통신하는 메시지를 응답(Response)이라고 한다.

화면전환이 없는 비동기 통신을 하기 위해선 메시지 본문에 요청 / 응답에 데이터를 담아 보내야 하는데 이 본문이 바로 body이다.
따라서 RequestBody = 요청본문 / ResponseBody = 응답본문 이라고 생각하면 될 것이다.


  • @RequestBody
    HTTP body 안에 JSON을 자바객체로 변경하여 VO 또는 DTO에 맵핑하는 스프링 어노테이션
    HTTP 요청을 자바 객체로 전달받을 수 있다.

  • @ResponseBody
    VO나 DTO 자바객체를 JSON으로 바꿔서 HTTP body에 담는 스프링 어노테이션
    메서드의 return 값을 HTTP Response body에 담는 역할을 한다.

그러나 요청은 JSON으로 왔는데 Response가 XML을 내보낸다면 결과가 이상해질 수 있습니다.
때문에 HTTP Request body가 그대로 전달되어 Request와 같은 타입으로 반환된다.


  • @RestController
    매번 메소드마다 @ResponseBody를 써주기 귀찮을 때 RestController를 써준다면 리턴값에 자동으로 ResponseBody가 붙어 리턴 되기 때문에 별도로 쓰지 않아도 HTTP Response body에 자동으로 자바 객체가 매핑되어 전달된다.
    즉, Controller + ReqeustBody 이다.

  • 사용 예시

비동기 통신에 사용되기 때문에 주로 Ajax통신에 많이 사용됩니다.
다음 예시의 메서드는 Json타입의 Ajax데이터를 파라미터 boardVO로 받아 가공 후 다시 JSON 형태로 리턴하는 메서드 입니다.

	@ResponseBody
	@RequestMapping(value = "/{boardNo}", method = RequestMethod.PUT)
	public String test(@PathVariable("boardNo") int boardNo 
    				  ,@RequestBody BoardVO boardVO){
			boardVO.setName("예시입니당.");
            return boardVO.getName;
	}

0개의 댓글