https://bobo12.tistory.com/314
(2) 객체의 반환
▷ JSON, XML을 이용함
◎ src/main/java/org.codehows.domain → SampleVO 클래스 생성
package org.codehows.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class SampleVO { private Integer mno; private String firstName; private String lastName; }
비어 있는 생성자를 만들기 위한 @NoArgsConstructor, 모든 속성을 사용하는 생성자를 위한 @AllArgsConstructor
◎ src/main/java/org.codehows.controller → SampleController 클래스 수정
▷ SampleVO를 리턴하는 메소드 설계
...(생략)... @GetMapping(value = "/getSample", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE, MediaType.APPLICATION_XML_VALUE }) public SampleVO getSample() { return new SampleVO(112, "스타", "로드"); } ...(생략)...
getSample()은 XML과 JSON 방식의 데이터를 생성할 수 있도록 작성 됨
▷ http://localhost:8080/sample/getSample
위 주소를 입력하면 아래와 같은 결과가 출력됩니다.
▷ http://localhost:8080/sample/getSample.json
위 주소를 입력하면 아래와 같은 결과가 출력됩니다.
@GetMapping이나 @RequestMapping의 produces 속성은 반드시 지정해야 하는 것은 아니라 생략하는 것도 가능
◎ 코드 추가...(생략)... @GetMapping(value = "/getSample2") public SampleVO getSample2() { return new SampleVO(113, "로켓", "라쿤"); } ...(생략)...
http://localhost:8080/sample/getSample2.json
위 주소를 입력하면 아래와 같은 결과가 출력됩니다.
(3) 컬렉션 타입의 객체 반환
▷ 경우에 따라 여러 데이터를 한 번에 전송하기 위해 배열이나 리스트, 맵 타입의 객체 전송
◎ src/main/java/org.codehows.controller → SampleController 클래스 수정
...(생략)... @GetMapping(value = "/getList") public List<SampleVO> getList() { return IntStream.range(1, 10).mapToObj(i -> new SampleVO(i, i + "First", i + " Last")) .collect(Collectors.toList()); } ...(생략)...
getList()는 내부적으로 1부터 10미만까지 루프를 처리하면서 SampleVO 객체를 만들어서 List<SampleVO>로 만듬
◎ http://localhost:8080/sample/getList 로 주소 입력시 출력 화면
◎ http://localhost:8080/sample/getList.json 로 주소 입력시 출력 화면
◎ 클래스 수정...(생략)... @GetMapping(value = "/getMap") public Map<String, SampleVO> getMap() { Map<String, SampleVO> map = new HashMap<>(); map.put("First", new SampleVO(111,"그루트","주니어")); return map; } ...(생략)...
▷ http://localhost:8080/sample/getMap
위의 주소로 입력시 아래의 결과가 나타납니다.
▷ http://localhost:8080/sample/getMap.json
위의 주소로 입력시 아래의 결과가 나타납니다.
▷ Map을 이용하는 경우에는 '키(key)'에 속하는 데이터는 XML로 변환되는 경우에 태그에 이름이 되기 때문에 문자열 지정
(4) ResponseEntity 타입
▷ REST 방식으로 호출하는 경우 화면 자체가 아니라 데이터 자체를 전송하는 방식
데이터를 요청 한 쪽에서 정상적인 데이터인지 비정상적인 데이터인지 구분할 수 있는 방법 제공
▷ ResponseEntity는 데이터와 함께 HTTP 헤더의 상태 메시지 등을 같이 전달하는 용도로 사용
▷ HTTP의 상태 코드와 에러 메시지 등을 함께 데이터를 전달할 수 있으므로 받는 입장에서 확실하게 결과를 알 수 있음
◎ src/main/java/org.codehows.controller → SampleController 클래스 수정
...(생략)... @GetMapping(value = "/check", params = {"height", "weight"}) public ResponseEntity<SampleVO> check(Double height, Double weight) { SampleVO vo = new SampleVO(0, "" + height, "" + weight); ResponseEntity<SampleVO> result = null; if(height < 150) { result = ResponseEntity.status(HttpStatus.BAD_GATEWAY).body(vo); } else { result = ResponseEntity.status(HttpStatus.OK).body(vo); } return result; } ...(생략)...
check()는 반드시 'height'와 'weight'를 파라미터로 전달 받고 만일 'height' 값이 150보다 작다면 502(bad gateway)
상태 코드와 데이터를 전송하고, 그렇지 않다면 200(ok) 코드와 데이터를 전송합니다.
http://localhost:8080/sample/check.json?height=140&weight=60
위의 주소로 입력시 아래의 결과가 나타납니다.
새로운 클래스를 통해 변수들을 불러오고 SampleController 클래스를 생성해 화면에 원하는 값들이 출력할 수 있도록 만들었습니다.
아직까지는 이전에 사용했던 방식과 크게 차이가 없는 것 같네요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Spring' 카테고리의 다른 글
[코드로 배우는 스프링 웹 프로젝트] ch17 Ajax 댓글 처리 1(Ajax, 게시물 등록) (0) | 2023.04.02 |
---|---|
[코드로 배우는 스프링 웹 프로젝트] ch16 REST 방식으로 전환 3(@RestController, 테스트 방법) (0) | 2023.03.31 |
[코드로 배우는 스프링 웹 프로젝트] ch16 REST 방식으로 전환 1(@RestController) (0) | 2023.03.31 |
[코드로 배우는 스프링 웹 프로젝트] ch15 검색 처리 3(목록, 검색 버튼 이벤트, 수정, 삭제) (0) | 2023.03.31 |
[코드로 배우는 스프링 웹 프로젝트] ch15 검색 처리 1(sql, MyBatis 동적 태그) (0) | 2023.03.31 |