반응형

이 글은 이지업 - 포토그램 만들기를 토대로 작성하였습니다.

 

HttpResponseJsonController.java를 만들어서 @RestController로 만들어 준 후

json으로 응답하는 방법 3가지를 알아보자.

 

1. json형식으로 직접 return 해주기

@GetMapping("/resp/json") 	
public String respJson() { 
	return "{\"username\":\"cos\"}"; 	
}

 

여기서 return 안에 들어가는 문자는 메모장을 켜서 아래와 같이 작성해준다.

{"username":"cos"}

그리고 그대로 복사해서 return 값에 넣어주면 위와 같이 정리되어 들어간다.

 

 

2. java object로 받아서 String형으로 반환

@GetMapping("/resp/json/object") 	
	public String respJsonObject() { 		
	User user = new User(); 		
	user.setUsername("Junfe"); 		 		
	String data = "{\"username\":\""+user.getUsername()+"\"}"; 		
	return data; 	
}

user 객체를 생성해서 그 안에 "Junfe"라는 내용을 담는다.

그리고 data라는 String 형을 선언해서 json 형식으로 작성해준다.

 

실제 개발하면서 절대로 이렇게 사용하진 않는다. data에 들어가는 저 내용을 직접 작성하는 것은 정말 힘든 일일 것이다.....

 

 

3. MessageConverter 가 자동으로 java object를 json 형태로 변환

@GetMapping("/resp/json/javaobject") 	
public User respJsonJavaObject() { 		
	User user = new User(); 		
	user.setUsername("Junfe"); 		 		
	return user;
	// 1. MessageConverter 가 자동으로 JavaObject를 Json으로 변경해서 통신을 통해 응답을 해준다. 					
	// 2. @RestController 일때만 MessageConverter가 작동한다. 	
}

여기서는 객체 자체를 반환한다. 그러면 MessageConverter가 자동으로 JavaObject를 Json으로 변경해준다.

 

이 때, 주의할 점은 controller가 @RestController 여야 한다는 것이다.

 

 

위 3가지 방법의 결과는 모두 아래와 같다.

 

크롬에서 json viewer를 확장하여 사용하기 해놔야 위와 같이 표기된다.

 

 

반응형
반응형

이 글은 이지업 - 포토그램 만들기 수업을 토대로 작성하였습니다.

 

1. http header란?

웹 서버 및클라이언트 사이에서, - 일반 문서데이터(바디 본문) 이외에, 추가적인정보를 교환할 수 있도록, - HTTP 메세지 선두에 삽입되는 요소로 수십개의 다양한 종류를 갖음

 

헤더 정보에 Content-Type도 담긴다.

대표적인 3가지 Content-Type은 아래와 같다.

  1. x-www-form-urlencoded (스프링부트는 기본적으로 이 타입을 파싱해준다.) <key=value 형태>
  1. text/plain <안녕하세요 형태>
  1. application/json <{"username" : " junfe"} 형태>

 

 

HttpBodyController.java 전체 코드
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RestController;  
import com.cos.controllerdemo.domain.User;  

@RestController 
public class HttpBodyController {  	
	// 로그를 찍어줌. 
	private static final Logger log = LoggerFactory.getLogger(HttpBodyController.class);
    
    @PostMapping("/body1") 	
    public String xwwwformurlencoded(String username) {
    	log.info(username); 		
    	return "key=value 전송옴."; 	
    } 	 	
    
    @PostMapping("/body2") 	
    public String textplain(@RequestBody String data) { 
    	//평문. 		 		
        log.info(data); 		
        return "plain/text 전송옴."; 	
    } 	 	
    
    @PostMapping("/body3") 
    public String applicationjson(@RequestBody String data) { 
    	log.info(data); 		 		
        return "json 전송옴.";
    }
    
    @PostMapping("/body4") // json데이터를 자바 object로 바로 받음. 	
    public String applicationjsonToObject(@RequestBody User user) { 
    	log.info(user.getUsername()); 	
        return "json 전송옴."; 	
    }
}

 

 

postman을 이용해서 각각 data를 전달해보고 결과를 보자.

  1. x-www-form-urlencoded 로 data 전달 및 결과
postman을 통한 data 전달.

 

결과

 

2. text/plain 을 이용한 data 전달 및 결과

data 전달

 

결과

 

3. application/json 을 통한 data 전달 및 결과

jason data 전달
결과

 

그런데 json에서는 원하는 값만 얻어 올 수가 없고 통으로 표기된다. json 데이터를 바로 받아오기 위해서 User 클래스를 추가하고 4번째 메소드를 생성해보자.

 

User.java 코드

public class User { 
	private String username;  
    
    public String getUsername() { 	
    	return username; 	
    }  
    
    public void setUsername(String username) { 	
    	this.username = username; 	
    } 
}    

 

4번째 메소드는 전체 코드에 적혀있는 applicationjsonToObject 메소드이다.

이를 실행해보면 결과는 다음과 같다.

json data를 java object로 바로 받아온다.

 

json 데이터를 java object 로 바로 받아오는 것을 확인할 수 있다.

 

 

 

 

반응형
반응형

이 글은 이지업 - 포토그램 만들기 수업을 토대로 작성하였습니다.

 

http 쿼리 스트링(querystring), 주소 변수 매핑(path variable)에 대해 알아보자.

구체적인 데이터 요청시에 쿼리스트링이나 주소변수매핑이 필요하다. 스프링 부트에서는 일반적으로 주소변수매핑을 사용한다. 그 이유는 편리하기 때문이다. 아래에 코드로 확인해보자.

 

1. 쿼리스트링(querystring)

쿼리스트링의 구조는 다음과 같다.

 

주소? type=고구마피자

 

이 글은 이지업 - 포토그램 만들기 수업을 토대로 작성하였습니다.

@GetMapping("/pizza")
	public String chickenQuery(String type) {
		return type+" 배달갑니다. (쿼리스트링)";
	}

 

RestController 안에 GetMapping으로 작성하였다. 데이터의 주제는 필자가 좋아하는 피자로 하였다.

결과 창을 보면 아래와 같다.

쿼리스트링 결과창

 

 

2. 주소변수매핑(path variable)

구조

주소/고구마피자

@GetMapping("/pizza/{type}")
	public String pizzaPath(@PathVariable String type) {
		return type+" 배달갑니다. (주소 변수 매핑)";
	}

결과는 아래와 같다.

 

주소변수맵핑 결과창

전체 코드

더보기
package com.cos.controllerdemo.web;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class QueryPathController {

	@GetMapping("/pizza")
	public String pizzaQuery(String type) {
		return type+" 배달갑니다. (쿼리스트링)";
	}
	
	@GetMapping("/pizza/{type}")
	public String pizzaPath(@PathVariable String type) {
		return type+" 배달갑니다. (주소 변수 매핑)";
	}
}
반응형
반응형

 

이 글은 이지업 - 포토그램 만들기 수업을 토대로 작성하였습니다.

 

http 요청 과정을 간단하게 그려보면 아래와 같다.

클라이언트가 웹 서버로 요청을 하면 요청을 받은 웹 서버는 DB에서 정보를 가져오고 그것으로 응답하는 것이다.

 

클라이언트가 웹서버에 요청하는 방식은 4가지 방식이 있다.

 

(1) GET(동사) - 데이터 요청

(2) POST(동사) - 데이터 전송 (http body 필요)

(3) PUT(동사) - 데이터 갱신 (http body 필요)

(4) DELETE(동사) - 데이터 삭제

 

 

 

controller-demo 프로젝트 생성해서 확인해보기

package com.cos.controllerdemo.web;

import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;

//@Controller // file을 응답하는 컨트롤러. (클라이언트가 브라우저면 .html 파일을)
@RestController // Data를 응답하는 컨트롤러. (클라이언트가 핸드폰이면 data)
public class HttpController {

	// http://localhost:8080/get
	@GetMapping("/get")
	public String get() {
		return "<h1>get요청됨.</h1>";
	}
	
	// http://localhost:8080/post
	@PostMapping("/post")
	public String post() {
		return "post요청됨.";
	}
	
	// http://localhost:8080/put
	@PutMapping("/put")
	public String put() {
		return "put요청됨.";
	}
	
	// http://localhost:8080/delete
	@DeleteMapping("/delete")
	public String delete() {
		return "delete요청됨.";
	}
	
}

그럼 각각의 요청들의 결과를 확인해보자.

  1. GetMapping

주소창에

localhost:8080/get

을 작성해보면 아래와 같이 결과를 확인할 수 있다.

(get만 웹브라우저에서 요청이 가능하고 나머진 불가능하다.)

나머지를 요청했을 경우 아래와 같은 화면이 나온다.

 

나머지 요청들을 확인하기 위해서는 기존에 설치했던 'Postman'을 이용하면 된다.

'Postman'을 사용하여 요청해보면 아래와 같은 화면이 나온다.

Post 요청

 

Put 요청

 

Delete 요청

 

반응형

+ Recent posts