seong

Controller 데이터 받기 - JSON, 통신상태 (white 마무리) 본문

Spring/SpringBoot

Controller 데이터 받기 - JSON, 통신상태 (white 마무리)

hyeonseong 2022. 8. 30. 22:36

첫번째 방법 - 라이브러리 이용해 상태코드 받아보기.

Four.java 작성

package site.metacoding.demo.domain;


import lombok.Getter;
import lombok.Setter;

@Setter
@Getter

public class Four {
	private String title;
	private String content;
}

FourController.java 작성

package site.metacoding.demo;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import site.metacoding.demo.domain.Four;
@RestController // IOC 컨테이너에 New
public class FourController {
	
	
	@GetMapping("/four")
	public ResponseEntity<Four> getData() {
		//1. 오브젝트를 리턴
		Four four = new Four();
		four.setTitle("Json데이터로 받아보기");
		four.setContent("내용입니다.");
		//2.데이터가 제대로 전달되었다면 웹의 상태 코드,four의 내용 출력
       
		ResponseEntity<Four> response = new ResponseEntity<>(four,HttpStatus.OK);
		return response;
	}
}

결과

따로 데이터를 Json으로 바꿔주지 않았다. 하지만 웹에서 확인해본 결과 Json형태로 받아졌고, 상태코드 200도 잘 전달 되었다.

Json으로 바뀐 이유?

DS(Dispatcher Sevlet)에서 Four오브젝트를 리턴 받고, 그 값들을 MessageConverter로 전달해 주기 때문이다.

또한 Json으로 들어온 타입의 데이터를 컴파일해서 넘겨주기도 한다. 즉, 주고/받기가 Json형태로 이루어진다.

두번재 방법 - ResponDto를 작성해 직접 상태코드를 넘겨줘보자.

추가로 해줄 것은 ResponDto를 작성해주면된다.

RespDto

package site.metacoding.demo.white.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class RespDto<T> {
	private Integer code;// 리턴 값이 1이면 성공, -1이면 실
	private String msg;// 메세지 성공, 실패 메세지 출
	private T body; // body 데이터의 타입을 정확하게 알 수 없기 때문에 T로 추상적으로 준다. 
}

FourController.java 

package site.metacoding.demo;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import site.metacoding.demo.domain.Four;
import site.metacoding.demo.white.dto.RespDto;
@RestController // IOC 컨테이너에 New
public class FourController {
	
	
	@GetMapping("/four")
	public ResponseEntity<Four> getData() {
		//1. 오브젝트 타입으로 리턴
		Four four = new Four();
		four.setTitle("Json데이터로 받아보기");
		four.setContent("내용입니다.");
		//2.데이터가 제대로 전달되었다면 웹의 상태 코드,four의 내용 출
		ResponseEntity<Four> response = new ResponseEntity<>(four,HttpStatus.OK);
		return response;
	}
	
	@GetMapping("/four/data")
	public RespDto<Four> respData() {
		Four four = new Four();
		four.setTitle("Json데이터로 받아보기");
		four.setContent("내용입니다.");
		
		RespDto<Four> respDto = new RespDto<>(1,"성공", four);
		
		if(respDto.getCode() == 1) {// 만약 1이 아니라면 null반환
			return respDto;
		}
		else {
			return null;
		}
		
	}
}

결과

이렇게 직접 상태 코드와, 메세지를 직접 만들어서 쓸 수 있다. 하지만 HTTP 프로토콜이 있기 때문에 첫번째 방법을 써주는 것이 대부분이다.


HTTP 응답 상태 코드 

  • 특정 HTTP 요청이 성공적으로 완료 되었는지 알려주는 코드이다. 

간단 하게 정리

 응답 상태 해석
100~ 요청을 수신했고, 계속 진행 하라는 의미
200~ 요청이 성공적.
300~ 요청을 완료 했지만 , 계속 처리중이거나 추가적인 작업이 필요.
400~ 클라이언트의 요청이 잘못.
500~ 서버쪽에서 오류가 발생.

더 자세한 응답 상태는 아래에서 확인

https://developer.mozilla.org/ko/docs/Web/HTTP/Status