빵구의 개발 메꾸기

스프링 부트(Spring Boot)를 활용한 RESPONSE 내보내기 본문

BACK-END/SPRING BOOT

스프링 부트(Spring Boot)를 활용한 RESPONSE 내보내기

bkjo94 2022. 5. 15. 23:28

스프링 부트(Spring Boot)를 활용하여 HEADERS의 content-type 별 RESPONSE를 내보내는 방법에 대해 알아보자.

@RestController는 해당 class가 RestAPI를 처리하는 Controller로 등록하겠다는 의미에서 사용된다.

request가 들어오면 object mapper를 통해 object로 바뀌고 해당 메서드를 타고 response로 나갈때 object를
던지게 되면 object mapper를 통해 json으로 바뀐다.

 

 

 

<TEXT로 내보내는 경우>

① 카멜 케이스(Camel Case)인 footSize property에 대해 @JsonProperty("foot_size") 스네이크 케이스(Snake Case)로

    설정해주게 되면 API 요청 시 보내는 JSON 데이터의 key 값이 foot_size로 들어와도 footSize로 매핑이 된다.

@GetMapping에 path 속성은 생략하고 세부 URL에 대한 path를 지정해준다.

요청을 보내는쪽에서 ? 뒤의 쿼리 파라미터에 대한 데이터를 대해 받기 위해서 @RequestParam를 넣고 타입 뒤에

    있는 변수명에는 API 요청 시 쿼리 파라미터에 작성한 key=value에서의 key와 일치해야 한다.

④ GET으로 설정한 뒤 요청을 보낼 URL인 localhost:8080/api/test/text-response-method?

    userName=bkjo를 셋팅한다.

Send 버튼을 클릭하여 GET REST API를 호출한다.

⑥ return 받은 값을 보면 정상적으로 userName 값이 Body에 담긴 것을 확인할 수 있다.

⑦ Headers의 Content-Type을 보면 text/plain;charset=UTF-8로 담긴 것을 확인할 수 있다.

 

 

 

<JSON으로 내보내는 경우>

① 카멜 케이스(Camel Case)인 footSize property에 대해 @JsonProperty("foot_size") 스네이크 케이스(Snake Case)로

    설정해주게 되면 API 요청 시 보내는 JSON 데이터의 key 값이 foot_size로 들어와도 footSize로 매핑이 된다.

@PostMapping에 path 속성은 생략하고 세부 URL에 대한 path를 지정해준다.

③ REST API 요청 시 body에 담겨 들어오는 데이터들을 받기 위해 메서드의 파라미터 정보에 대해서 @RequestBody를

    넣고 타입은 User로 설정한다.

POST로 설정한 뒤 요청을 보낼 URL인 localhost:8080/api/test/json-response-method를 셋팅한다.

데이터를 작성하기 위해 Body를 클릭한다.

raw를 클릭하고 JSON으로 셋팅한다.

JSON 형식의 보낼 데이터를 작성한다.

Send 버튼을 클릭하여 POST REST API를 호출한다.

return 받은 값을 보면 정상적으로 Body에 담긴 것을 확인할 수 있다.

⑩ Headers의 Content-Type을 보면 application/json으로 담긴 것을 확인할 수 있다.

 

 

 

<JSON으로 내보내는 경우(상태코드 포함)>

① 카멜 케이스(Camel Case)인 footSize property에 대해 @JsonProperty("foot_size") 스네이크 케이스(Snake Case)로

    설정해주게 되면 API 요청 시 보내는 JSON 데이터의 key 값이 foot_size로 들어와도 footSize로 매핑이 된다.

@PutMapping에 path 속성은 생략하고 세부 URL에 대한 path를 지정해준다.

③ REST API 요청 시 body에 담겨 들어오는 데이터들을 받기 위해 메서드의 파라미터 정보에 대해서 @RequestBody를

    넣고 타입은 User로 설정한다.

PUT으로 설정한 뒤 요청을 보낼 URL인 localhost:8080/api/test/response-entity-method를 셋팅한다.

데이터를 작성하기 위해 Body를 클릭한다.

raw를 클릭하고 JSON으로 셋팅한다.

JSON 형식의 보낼 데이터를 작성한다.

Send 버튼을 클릭하여 PUT REST API를 호출한다.

return 받은 값을 보면 정상적으로 Body에 담긴 것을 확인할 수 있다.

⑩ 내보내준 Created에 대한 201 HTTP 상태코드와 Headers의 Content-Type을 보면 application/json으로 담긴 것을

    확인할 수 있다.

 

 

 

<HTML로 내보내는 경우>

① HTML로 내보내기 위해 resources/static 하위에 html파일을 생성한다.

② 생성한 html에 대해 URL로 접속 시 화면이 잘 출력되는지 확인한다.

③ API 요청 시 들어오는 URL을 받기 위해 화면과 연결 된 페이지 컨트롤러에서 @RequestMapping에 

    path 속성은 생략하고 세부 URL에 대한 path를 지정해준다.

④ response로 내보내줄 test.html 파일을 잡아준다.

⑤ GET으로 설정한 뒤 요청을 보낼 URL인 localhost:8080/html-method를 셋팅한다.

Send 버튼을 클릭하여 GET REST API를 호출한다.

return 받은 값을 보면 정상적으로 Body에 담긴 것을 확인할 수 있다.

⑧ Headers의 Content-Type을 보면 text/html로 담긴 것을 확인할 수 있다.

 

 

 

<@JsonNaming 활용 방법>

① class위에 @JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)를 설정해주게 되면

    VO의 모든 property들이 카멜 케이스(Camel Case)이고 API 요청 시 보내는 JSON 데이터의 key 값이 스네이크 

    케이스(Snake Case)로 들어와도 매핑이 된다.

② @RestController가 있는 경우에는 상관이 없지만 화면과 연결 된 @Controller를 사용하는 경우 메서드에

    @ResponseBody를 통해서 object를 json으로 내보내준다.

    API 요청 시 들어오는 URL을 받기 위해 화면과 연결 된 페이지 컨트롤러에서 @RequestMapping에

    path 속성은 생략하고 세부 URL에 대한 path를 지정해준다.

③ GET으로 설정한 뒤 요청을 보낼 URL인 localhost:8080/user-method를 셋팅한다.

Send 버튼을 클릭하여 GET REST API를 호출한다.

return 받은 값을 보면 정상적으로 Body에 담긴 것을 확인할 수 있으나 null인 property에 대해서도 담긴 것을

   확인할 수 있다. (null은 제외하고 response를 내보내고 싶은 경우는 하단의 @JsonInclude 활용 방법을 참고)

 

 

 

<@JsonInclude 활용 방법>

① class위에 @JsonInclude(JsonInclude.Include.NON_NULL)을 설정해주게 되면 VO의 모든 property들에 대해서

    null이 존재하는 경우 null은 제외하고 response로 내보내준다.

② @RestController가 있는 경우에는 상관이 없지만 화면과 연결 된 @Controller를 사용하는 경우 메서드에

    @ResponseBody를 통해서 object를 json으로 내보내준다.

    API 요청 시 들어오는 URL을 받기 위해 화면과 연결 된 페이지 컨트롤러에서 @RequestMapping에

    path 속성은 생략하고 세부 URL에 대한 path를 지정해준다.

③ GET으로 설정한 뒤 요청을 보낼 URL인 localhost:8080/user-method를 셋팅한다.

 Send 버튼을 클릭하여 GET REST API를 호출한다.

return 받은 값을 보면 정상적으로 Body에 담긴 것을 확인할 수 있으나 null인 property는 제외하고 담긴 것을

   확인할 수 있다.

Comments