본문 바로가기
Spring공부/1-REST

REST방식(3)

by 으노으뇨 2021. 10. 6.
728x90
반응형
SMALL

프로젝트생성과 의존성주입을 마쳤다. 

@RestController의 반환 타입에 대해 공부하도록하자

스프링의 @RestController는 특별히 기존 @Controller와 다른 점은 없다. 그러니 평소와 동일하게 또는 사진과 같이 패키지에 클래스를 만들어보자

패키지는 org.study.controller 이름으로 작성한다.

사진의 맨밑처럼 SampleController를 만들었다.

나는 기존의 프로젝트에 REST방식을 공부키위해 HomeController가 있는것이다. 크게상관은 없다.

 

 

@RestController는 JSP와 달리 순수한 데이터를 반환하는 형태이므로 다양한 포맷의 데이터를 전송할 수 있다.

주로 많이 사용하는 형태는 일반 문자열이나 JSON, XML 등을 사용한다.

SampleController에 문자열을 반환하려면 다음과 같은 형태로 작성한다.

package org.study.controller;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.log4j.Log4j;

@RestController
@RequestMapping("/sample/*")
@Log4j
public class SampleController {

	@GetMapping(value = "/getText", produces = "text/plain; charset=UTF-8")
	public String getText() {
		log.info("MIME TYPE : " + MediaType.TEXT_PLAIN_VALUE);

		return "Hi";
	}
}

기존의 @Controller는 문자열을 반환하는 경우에는 JSP파일의 이름으로 처리하지만, @RestController의 경우에는 순수한 데이터가 됩니다. @GetMapping에서 사용된 produces 속성은 해당 매서드가 생산하는 MIME타입을 의미한다.

위와같이 열로 직접 지정할 수도 있고, 메서드 내의 MediaType이라는 클래스를 이용할 수도 있다.

작성한 코드가 정상작동되는지 실행시켜본다.

http://localhost:8080/sample/getText 를 입력하면 될것이다.

 

//

객체의 반환

객체를 반환하는 작업은 JSON이나 XML을 이용한다. 전달된 객체를 생산한기 위해서

org.study.domain 패키지를 생성하고 SampleVO클래스를 작성한다.

package org.study.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SampleDTO {

	private Integer mno;
	private String firstName;
	private String lastName;
}

맨하단의 sampleVO에 코드블럭과 같이 입력한다. 

SampleVO 클래스는 비어있는 생성자를 만들기 위한 @NoArgsConstructor와 모든 속성을 사용하는 생성자를 위한 @AllArgsConstructor 어노테이션을 이용했습니다. 어노테이션을 통해서 생성된 결과를 보면 생성자가 여러 개 생성되는 것을 볼 수 있습니다. 

 

 

 

SampleController에서는 SampleVO를 리턴하는 매서드를 아래와 같이 설계합니다.

	@GetMapping(value = "/getSample", produces = { MediaType.APPLICATION_JSON_UTF8_VALUE,
			MediaType.APPLICATION_XML_VALUE })
	public SampleVO getSample() {
		log.info("MIME TYPE : " + MediaType.TEXT_PLAIN_VALUE);

		return new SampleVO(112, "start", "srping");
	}

getSample() 은 XML과 JSON 방식의 데이터를 생성할 수 있도록 작성 되었는데, 브라우저에서 '/sample/getSample'을 호출하면 다음과 같은 화면을 볼 수 있다. 

(APPLICATION_JSON_UTF8_VALUE 는 스프링 5.2버전부터 Deprecated되고, APPLICATION_JSON_VALUE로 사용합니다.)

브라우저가 받은 데이터가 XML이기 때문에 보이는 화면이다. 개발자 도구를 통해서 보면 정상적인 XML 데이터라는 것을 확인할 수 있다.

동일하게 http://localhost:8080/sample/getSample.json 로 호출한다면 json타입의 데이터가 전달되는 것을 확인할 수 있다.

@GetMapping이나 @RequestMapping의 produces속성은 반드시 지정해야 하는 것은 아니므로 생략하는 것도 가능하다.

	@GetMapping(value = "/getSample2")
	public SampleVO getSample2() {
		log.info("MIME TYPE : " + MediaType.TEXT_PLAIN_VALUE);

		return new SampleVO(113, "spring", "java");
	}

을 추가하여 직접 실행해 차이가있는지, 없는지 확인해보자 

-객체전달

-반환타입

728x90
반응형
LIST

'Spring공부 > 1-REST' 카테고리의 다른 글

REST방식(6)-Ajax댓글처리  (2) 2021.10.07
REST방식(5)  (0) 2021.10.07
REST방식(4)  (0) 2021.10.06
REST방식(2)-의존성주입  (0) 2021.10.06
REST방식(1)  (0) 2021.10.06

댓글