스프링 @RequestBody, @ResponseBody :: 개발/일상_Mr.lee

스프링 @RequestBody, @ResponseBody

Posted by Mr.mandu.
2017. 7. 7. 06:30 개발/java,spring

프로젝트를 진행하며 json 형태의 데이터를 주고받을 경우가 생겼다.

요즘 xml이나 json 등의 형식으로 주고받은 경우가 빈번하게 발생하고 있는 추세이다.


스프링 MVC

이에 따라 스프링 MVC도 클라이언트에서 전송한 XML 데이터나 JSON 또는 기타 데이터를 컨트롤러에서 DOM 객체나 자바 객체로 변환해서 송, 수신 즉 주고 받을 수 있다.


@RequestBody 어노테이션과 @ResponseBody 어노테이션은 

각각 HTTP 요청 몸체를 자바 객체로 변환하고 자바 객체를 HTTP 응답 몸체로 변환하는 데 사용


@RequestBody  

 - HTTP 요청 몸체를 자바 객체로 전달받음

 - HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할


@ResponseBody 

 - 자바 객체를 HTTP 응답 몸체로 전송함

 - 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할


예제소스

@RequestMapping(value="/json/getTeest.json", produces = "application/json")
	public @ResponseBody JSONObject  getTest(HttpServletRequest req, HttpServletResponse res, Model model) {
		JSONObject json = new JSONObject();
		json = service.test(param);
		return json;
	}

실 프로젝트에서 json을 View 단으로 전송하기위해 

@ResponseBody를 사용했습니다.



또다른 예제로는

@RestController

public class LoginWebController 

{

    // HTTP 요청의 내용을 객체에 매핑하기위해 @RequestBody 애너테이션을 설정한다.

    @RequestMapping(value="test/test", method = RequestMethod.POST)

    public testDto login(@RequestBody Test testVO) 

    {

    Test test = test.login(testVO); 

    return test;

    }

}

- 위의 예제 소스에서는 HTTP 요청의 body안에 Test 데이터를 파라미터로 받기위해, @RequestBody를 사용하였습니다.

  @ResponseBody를 사용하지 않은 이유는 @RestController를 사용하였기 때문

@Controller와는 다르게 @RestController는 리턴값에 자동으로 @ResponseBody를 붙게되어 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달 된다고 한다.

 ( ※ @Controller인 경우에는 @ResponseBody를 적어줘야 합니다. )