데이터 받는 방법 | 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가 진행되지 않는다.
'web > Spring' 카테고리의 다른 글
Springboot h2 초기 세팅 (연결 ~ 테스트) (0) | 2022.11.26 |
---|---|
@RestController = @ResponseBody + @Controller (0) | 2022.07.08 |
form -> server ->form 할 때 form 데이터 유지하고 싶다면 (0) | 2022.06.30 |
타임리프 메세지 국제화 (0) | 2022.06.29 |
intelliJ Spring properties의 국제화 작업 중 한글 인코딩 안됨 문제 (0) | 2022.06.29 |