무지성 메모

■ Get/ post, put, delete ■ 스프링 기본 파싱 전략

배게 2022. 3. 14. 18:30
728x90

1. Get요청

url의 parameter 형태로 ?key=value&key=value&... 형태로 데이터를 담아서 보냄

body로 데이터를 담아 보내지 않고 url에 담음

 

2. Post, Put, delete 요청 (데이터를 변경)

데이터를 담아서 보내야할 것이 많음 그래서 body에 담아서 보냄

 

여러가지 data MIME형식 중 form태그는 Get, Post방식 2가지 방식으로 밖에 보낼 수 없음 (key=value)

 

그래서 통일 : 자바스크립트로 ajax요청 + 데이터는 json으로 통일!!

form:form 태그라는 것도 있는데 (4가지 다 쓸 수 있음)(X) 안씀

 

자바스크립트로 ajax요청 + 데이터는 json으로 통일 <-- 이거씀

 

 


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

가령 get요청은 key=value이고 post요청 중에 x-www-form-urlencoded (form태그를 만들어서 데이터를 전송) 시에도 key=value이기 때문에 이러한 데이터는 스프링 컨트롤러가 가진 메소드의 parameter로 받을 수 있다

 

위와같이 post형식으로 key=value형식의 데이터를 담은 requestMessage를 controller의 join메소드의 urlMapping에 맞춘 후에 전송해줌

 

 

	@PostMapping("/dummy/join")
	public String join(User user, String username) {
		System.out.println(username);
		
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
		System.out.println(user.getEmail());
		
		// 이게 @DynamicInsert나 @ColumnDefault를 안쓰고 default로 넣는 방법인듯?
		// enum을 쓰면 값을 강제할 수 있다..
		user.setRole(RoleType.USER);
		User userSaved  = userRepository.save(user); 
//		System.out.println(userRepository.findById(userSaved.getId()));
		
		return "회원가입이 완료되었습니다.";
	}

key=value방식으로 보낸 requestMessage의 데이터를 Object형식(위의 예시는 User)로 받을 수 있다.

단 User클래스에 해당 속성(requestMessage의 Body에 담긴 username, password, email데이터)의 setter메소드가 정의되어 있어야 한다.

 

 

 

key=value 형태가 아닌 josn등의 데이터를 받아서 읽어 오려면 DTO 앞에 @RequestBody를 붙여주어야 한다.

	@PostMapping("/dummy/join")
	public String join(@RequestBody User user, String username) {
		System.out.println(username);
		
        .....