1. Get 요청 (Select)
주소에 데이터를 담아 보낸다.
http://localhost:8000/blog/dummy/user?username=key
body로 데이터를 담아 보내지 않는다. -> body가 없음
2. Post, Put, Delete 요청 - 데이터를 변경
데이터를 변경 (Insert, Update, Delete)
데이터를 담아 보내야 할 양이 많다. 회원가입 시 username, pssword, email, address, createDate 등등..
Post 요청 시에는 form 태그를 사용해서 method='Post'로 하면 된다. 그러나 form 태그는 전부 데이터의 형태가 (key=value)이고, GET, POST 시에만 가능하므로 다른 경우엔 자바스크립트로 요청해야 한다.
혼란스러울 수 있으니 자바스크립트로 ajax 요청 + JSON 데이터 형식으로 통일한다. - 사용 O
스프링에는 form:form 태그라고 post, put, delete, get 모든 요청이 가능한 기능도 존재하긴 한다. - 사용 X
3. 스프링 컨트롤러의 파싱 전략 1
스프링 컨트롤러는 기본적으로 key=value 데이터가 날라오면 자동으로 파싱해서 변수에 담아준다.
get 요청의 key=value, post 요청의 x-www-form-urlencoded (form 태그를 만들어서 전송) 시 아래처럼 함수의 파라미터로 받을 수 있다.
PostMapping("/home")
public String home(String username, String email){
return "home";
}
4. 스프링 컨트롤러의 파싱 전략 2
스프링은 key=value 형태의 데이터를 오브젝트로 파싱해서 받아주는 역할도 한다.
주의! 해당 오브젝트의 setter가 없으면 불가능 - 스프링이 setter를 호출해서 오브젝트를 만들기 때문
class User {
private String username;
private String password;
public String getUsername(){
return username;
}
public String getPassword(){
return password;
}
public void setUsername(String username){
this.username = username;
}
public void setPassword(String password){
this.password = password;
}
}
PostMapping("/home")
public String home(User user){
return "home";
}
내가 보내는 데이터가 post 방식의 key=value 형식 (x-www-form-urlencoded)으로 username=cos, password=123일 때 변수명과 같아야 setter가 호출이 된다. username2=cos 처럼 하면 데이터를 안넣어준다.
만약 username=cos만 보낸다면 password는 setter를 호출해서 null이 들어갈 것이다.
username=cos, password=123, email=cos@naver.com을 보내면 email은 setter가 없기 때문에 넣어주지 않는다.
key=value가 아닌 데이터는 어떻게 파싱할까?
json 데이터나 일반 text 데이터는 스프링이 파싱해서 오브젝트로 받지 못하기 때문에 @RequestBody 어노테이션을 붙여줘서 MessageConverter 클래스를 구현한 Jackson 라이브러리를 발동시켜 json 데이터를 자바 오브젝트로 파싱하여 받아준다.
PostMapping("/home")
public String home(@RequestBody User user){
return "home";
}
출처 : https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
'Spring > Blog 만들기 with SpringBoot' 카테고리의 다른 글
DB 격리수준, 스프링의 트랜잭션 (0) | 2022.07.09 |
---|---|
메인화면 구성 (0) | 2022.07.02 |
delete 테스트, Exception 처리 (0) | 2022.05.16 |
update 테스트, JPA 영속성 컨텍스트 (0) | 2022.05.16 |
selecte 및 paging 테스트 (0) | 2022.05.10 |