프로젝트생성과 의존성주입을 마쳤다.
@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");
}
을 추가하여 직접 실행해 차이가있는지, 없는지 확인해보자
-객체전달
-반환타입
'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 |
댓글