jusung-c
으 하기싫어
jusung-c
  • 공부 기록 (96)
    • Spring (42)
      • Spring 기초 이론 (8)
      • Spring 핵심 원리 - 기본 (9)
      • Blog 만들기 with SpringBoot (25)
    • JAVA (7)
      • Java 문법 (2)
      • 객체지향의 사실과 오해 (5)
    • Algorithm (47)
      • 자료구조 (3)
      • 완전탐색 (22)
      • 정렬 (4)
      • 이분탐색 (12)
      • 투 포인터 (4)
hELLO · Designed By 정상우.
jusung-c

으 하기싫어

Spring/Blog 만들기 with SpringBoot

스프링 기본 파싱 전략과 JSON 통신

2022. 6. 13. 20:47

 

 

 

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
    'Spring/Blog 만들기 with SpringBoot' 카테고리의 다른 글
    • DB 격리수준, 스프링의 트랜잭션
    • 메인화면 구성
    • delete 테스트, Exception 처리
    • update 테스트, JPA 영속성 컨텍스트
    jusung-c
    jusung-c

    티스토리툴바