본문 바로가기

web/Spring

@RequestParam @RequestBody @ModelAttribute 초간단 정리

  데이터 받는 방법 Setter 객체바인딩 주 용도
RequestParam url 뒤에 파라미터 Setter와 관계없음 불가능. 하나의 파라미터와 하나의 변수 바인딩하는 용도 url 파라미터를 객체화 하지 않고 쓸 때
RequestBody application/json
(주로 ajax 요청)
없어도됨 가능 #json데이터 처리
(ajax json 요청 등)
1. 객체화 해도 되고
2. 객체 없이
Map<Key: Value>
쌍으로 받기 가능
ModelAttribute multipart/form-data
(queryString, form)
있어야함 가능 1. url파라미터를 객체화 할 때

2. form 데이터를 객체화 할 때

 

 

@RequestBody의 경우 add와 같이 객체에 넣을 수도 있지만, add2와 같이 Map에 넣을 수도 있다!

public class ValidationItemApiController {
    @PostMapping("/add")
    public Object addItem(@RequestBody ItemSaveForm form, BindingResult bindingResult){
        log.info("API 컨트롤러 호출");

        if(bindingResult.hasErrors()){
            log.info("검증 오류 발생 errors={}",bindingResult);
             return bindingResult.getAllErrors();
        }

        log.info("성공 로직 실행");
        return form;
    }
    @PostMapping("/add2")
    public Object addItem2(@RequestBody Map<String,Object> temp){
        log.info("API 컨트롤러 호출");
        log.info("성공 로직 실행 temp = {}",temp);
        return temp;
    }
}

 

※BeanValidator 사용시에 

@ModelAttribute는 검증이 필드단위로 이루어진다. 특정 필드가 바인딩에 실패하더라도 나머지 필드는 정상 바인딩 되고 검증이 진행된다.

 

@RequestBody는 일단 Json to Object가 수행되지 않으면 validate가 진행되지 않는다.