관리 메뉴

제뉴어리의 모든것

@RequestParam과 @RequestBody 사용법 본문

Spring

@RequestParam과 @RequestBody 사용법

제뉴어리맨 2024. 6. 30. 22:48

 

Spring의 Controller에서 데이터를 받는 방식으로 가장 많이 쓰이는 두가지 어노테이션이다.

 

@RequestParam

  • 예시
	@PostMapping(value = "/registerProduct")
    @ResponseBody
	public String registerProduct(Model model, HttpSession session, @RequestParam Map<String, Object> paramMap) {
 		return service.createProduct(paramMap);
	}

 

위와 같이 보통 Map을 이용하여 프론트엔드단에서 보낸 데이터를 전달 받으며, 꼭 Map이 아니라 String타입의 하나의 변수여도 된다.

@RequestParam("name")

이렇게 직접 변수와 매핑할 key도 설정할 수 있다.

명심할점은 프론트엔드에서 보내는 body의 내용이 아니라, 폼 데이터 혹은 ajax 통신시 javascript 객체 자체 변환하여 생성된 쿼리스트링의 데이터를 매핑하는 것이라는 점이다. 그러므로 프론트엔드에서 전송할때 데이터를 json형식으로 직렬화 할 필요가 없다.

즉, 

@RequestParam 에 데이터를 담으려면

http://localhost:8080/users?name=홍길동 

과 같은 형식으로 전송되어야 한다는 것이다.

 

  • @RequestParam으로 받을 수 있는 프론트엔드단의 전송 방식
    • form 데이터 submit
    • ajax 통신시 javascript 객체 자체

@RequestBody

  • 예시
	@PostMapping("/registerProduct")
	@ResponseBody
	public ResponseEntity<Object> registerProduct(Model model, HttpSession session, @RequestBody ProductDTO epmoDTO) {

		User uSession = (User) session.getAttribute("UserInfo");
		Integer userCd = uSession.getUSER_CD();
		epmoDTO.setRegUserCd(userCd);
 		return service.createDeliveryProduct(epmoDTO);
	}

 

위와같이 @RequestBody는 본문(body)의 내용 자바객체로 변환해주는 어노테이션이다.

즉, 본문은 하나이므로 파라미터 중 1개에만 사용 가능한다

그리고 프론트엔드단에서 전송하는 본문의 데이터 형식이 JSON, XML, 텍스트와 같이 정해진 규격이여야한다.

주로 Json 데이터를 받는데 많이 사용된다.

그러므로 프론트엔드단에서는 보낸 데이터를 Json 직렬화 하여 전송하여야한다.

그래서 JSP 파일에서 ajax 통신시 data를 JSON.stringfy()로 Json 화 하는것이다.!!

그리고 중요한점, @RequestBody가 붙은 객체는 자바빈규약을 지켜야 매핑이된다.

예를들어 변수명은 소문자로 시작해야하고, getter, setter가 존재해야한다.

 

 

 

'Spring' 카테고리의 다른 글

스프링 앱의 기본 url 설정시 알고 있어야 하는 개념  (0) 2024.06.06