springboot - blog project (32)

Yuri Lee·2020년 8월 26일
0

springboot - blog project

목록 보기
19/49

스프링부트 강좌 32강(블로그 프로젝트) - 스프링 기본파싱전략과 json통신

1. Get요청(select)

  • 주소에 데이터를 담아 보낸다. 데이터 형태는 key=value

  • http://localhost:8000/blog/user?usernmae=ssar
    위와 같이 웹 브라우저에 주소를 입력하면 모든 게 get 요청이다.

  • body로 데이터를 담아 보내지 않음.

2. Post, Put, Delete 요청

  • Body에 데이터를 담아 보낸다. 데이터 형태는 json으로 통일하는 것이 좋다.

  • 데이터를 담아 보내야 할 것이 많음

  • username, password, email, address, createDate, gender .. etc...

  • form 태그 method='Post'

  • form 태그 => get 요청, post 요청밖에 하지 못한다. (key=value형태) 그래서 put, delete 요청을 할 때는 자바스크립트로 요청을 해야 함..

  • 로직이 통일이 안되는데...그래서 javascript로 ajax요청 + 데이터는 json으로 통일하자~~

form:form tag 가 있는데 .. post, put, delete, get 요청이 다 가능하다. 근데 얘는 사용안할 것,,,

3. 스프링 컨트롤러의 파싱 전략 1
스프링 컨트롤러는 key=value 데이터를 자동으로 파싱하여 변수에 담아준다.

가령 get요청은 key=value이고 post요청중에 x-www-form-urlencoded (form태그를 만들어서 데이터 전송) 시에도 key=value 이기 때문에 이러한 데이터는 아래와 같이 함수의 파라메터로 받을 수 있다.

PostMapping("/home")
public String home(String username, String email){
	
    return "home";
}

4. 스프링 컨트롤러의 파싱 전략 2
스프링은 key=value 형태의 데이터를 오브젝트로 파싱해서 받아주는 역할도 한다.

** 이때 주의 할점은 setter가 없으면 key=value 데이터를 스프링이 파싱해서 넣어주지 못한다.

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=ssar
password=1234

key값이 username, password가 변수값과 같아야 한다. 그래야 setter가 호출된다.

5. key=value가 아닌 데이터는 어떻게 파싱할까?
json 데이터나 일반 text데이터는 스프링 컨트롤러에서 받기 위해서는 @RequestBody 어노테이션이 필요하다.

** 기본전략이 스프링 컨트롤러는 key=value 데이터를 파싱해서 받아주는 일을 하는데 다른 형태의 데이터 가령 json 같은 데이터는 아래와 같이 생겼다.

{
"username":"ssar",
"password":"1234"
}
이런 데이터는 스프링이 파싱해서 오브젝트로 받지 못한다. 그래서 @RequestBody 어노테이션을 붙이면 MessageConverter 클래스를 구현한 Jackson 라이브러리가 발동하면서 json 데이터를 자바 오브젝트로 파싱하여 받아준다.

key, value 가 아닌 데이터는 RequestBody 를 꼭 붙여야 한다. 안붙이면 안받아 준다.

PostMapping("/home")
public String home(@RequestBody User user){

return "home";

}
6. form 태그로 json데이터 요청방법
key=value 데이터가 아니라 json데이터를 어떻게 전송할 수 있을까?

join.jsp

<form>
	<div class="form-group">
		<label for="username">유저네임</label> 
		<input type="text" id="username">
	</div>
	<div class="form-group">
		<label for="password">패스워드</label> 
		<input type="password" id="password">
	</div>
	
	<div class="form-group">
		<label for="email">이메일</label> 
		<input type="email" id="email">
	</div>
</form>

<button id="join--submit" class="btn btn-primary">회원가입</button>

join.js


-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글