상세 컨텐츠

본문 제목

controller @RequestBody, @RequestParam, @ModelAttribute 차이

Framework/Spring

by H_Develop 2022. 11. 28. 13:56

본문

@RequestMapping(value = "/bam/ba0030/detailInfo.do", method = RequestMethod.POST)
public ModelAndView insertDetailInfo(@ModelAttribute("vo") BA0030 vo, ModelMap model) throws Exception

	@RequestMapping(value = "/bam/ba0030/detailInfo.do", method = RequestMethod.POST)
	public ModelAndView insertDetailInfo(@RequestBody BA0030 vo, ModelMap model) throws Exception

POST

@RequestBody

HTTP Body안에 JSON을 VO에 맵핑하는 스프링 어노테이션이다. Body를 자바 객체로 받는다.

HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환하는 것.

Spring에서 제공하는 HttpMessageConverter를 통해 타입에 맞는 객체로 변환.

VO로 받는 법

dataType : text    contentType : application/json; charset=UTF-8    data : JSON.stringify(data)

@RequestBody Vo vo

controller에서 json형태의 vo를 받으려면 json문자열 형식으로 변환해야 하기에

JSON.stringify(data)로 파싱해서 보내준다. (자바스크립트 객체를 JSON 문자열로 변환)

 

@RequestParam

RequestBody는 Data를 넣어서 전달하고, RequestParam는 Parameter를 넣어서 전달한다.

@RequestParam String id 메소드 리턴이 String이면

ajax dataType옵션을 text로 해야하며, dataType옵션을 json으로 하면 아무것도 받지 못한다.

@RequestParam Map으로 값 받기

dataType : text    contentType : 생략   @RequestParam Map<String, Object> vo / 데이터를 body에 담아 보낸다.

contentType을 생략하면 default값이 application/x-www-form-urlencoded; charset=UTF-8로 적용된다.

 

@RequestBody 사용하지 않고 vo 로 받는 법

dataType : "text"

contentType : "application/x-www-form-urlencoded; charset=utf-8"

voName.toString()

 

@ModelAttribute

클라이언트가 보내는 HTTP 파라미터들을 특정 Java Object에 바인딩(맵핑)하는 것.

/modelattribute?name=req&age=1 같은 Query String 형태 혹은 요청 본문에 삽입되는 Form 형태의 데이터를 처리.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

PutMapping, DeleteMapping은 PostMapping과 다르게 @RequestBody형태로 받아야 하며, ajax에서는 json형태로 보내야 한다.

 

PUT

@RequestBody Vo vo

type : put    contentType : application/json    data : JSON.stringify(data)

 

Delete

@RequestBody Vo vo

type : delete   contentType : application/json    data : JSON.stringify(data)

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

JAVASCRIPT

 

ajax에서 JSON.parse()와 JSON.stringify()을 사용해보자.

 

JSON.parse() 는 String 객체를 json객체로 변환 시키고

JSON.stringify() 는 json객체를 String 객체로 변환 시킨다.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

ajax 에서 contentType: 'application/json' 으로 보내면 Map으로
contentType: 'text' 로 보내면 VO로 받습니다.

 

Controller에서 @RequestParam 은 Map 으로
@RequestBody는 Map 또는 VO로 받을 수 있습니다.

 

 

 

관련글 더보기