package org.example.restapi.restapi.controller;
import lombok.extern.slf4j.Slf4j;
import org.example.restapi.restapi.controller.model.UserInfo;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Slf4j
@Controller
@RequestMapping("/api/v1")
public class ResponseApiController {
//http://8080/api/v1
//@RequestMapping(method = RequestMethod.GET) //RequestMapping에도 명시해줄 수 있다.
//@RequestMapping("") //모든 요청을 받는다.
@GetMapping("")//명시적으로 GetMapping을 주는 것이 Best
@ResponseBody //컨트롤러 메서드에서 반환되는 데이터를 HTTP 응답 본문에 사용하도록 한다.
public UserInfo user(){
var user = new UserInfo();
var response = ResponseEntity.status(HttpStatus.ACCEPTED).header("x-custom","hi").body(user);
user.setUserName("홍길동");
user.setEmail("hong@gmail.com");
user.setPhoneNumber("010-1234-5678");
user.setIsKorean(true);
log.info("user :{}",user);
return user;
}
}
원하는 응답을 보내기 위해서는 메서드의 반환값을 응답으로 만들어주어야 한다.
user메서드의 반환값을 바꿔주자 위와 같이 바꿔주자.
user메서드의 반환값을 ResponseEntity<UserInfo>으로 바꿔준다.
:ResponseEntity는 Spring에서 HTTP 응답을 표현하는 클래스입니다. HTTP 응답의 상태 코드, 헤더 및 본문을 나타낼 수 있습니다.
여기서 UserInfo는 ResponseEntity가 포함하고 있는 HTTP 응답의 본문(body)의 타입을 나타냅니다. 즉, 이 응답은 UserInfo 객체를 본문으로 가지고 있음을 의미합니다.
응답할 객체를 만들어주자.
이 응답의 상태는 ACCEPTED, http 헤더는 x-custom, hi가 된다. body로는 user객체가 들어가도된다.
그렇기 때문에 위의 public ResponseEntity<UserInfo> user()에서 제너릭타입을 UserInfo로 정해준 것 이다.
생성한 응답을 반환해준다.
package org.example.restapi.restapi.controller;
import lombok.extern.slf4j.Slf4j;
import org.example.restapi.restapi.controller.model.UserInfo;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Slf4j
@Controller
@RequestMapping("/api/v1")
public class ResponseApiController {
//http://8080/api/v1
//@RequestMapping(method = RequestMethod.GET) //RequestMapping에도 명시해줄 수 있다.
//@RequestMapping("") //모든 요청을 받는다.
@GetMapping(path = "")//명시적으로 GetMapping을 주는 것이 Best
@ResponseBody //컨트롤러 메서드에서 반환되는 데이터를 HTTP 응답 본문에 사용하도록 한다.
public ResponseEntity<UserInfo> user(){
var user = new UserInfo();
var response = ResponseEntity.status(HttpStatus.ACCEPTED).header("x-custom","hi").body(user);
user.setUserName("홍길동");
user.setEmail("hong@gmail.com");
user.setPhoneNumber("010-1234-5678");
user.setIsKorean(true);
log.info("user :{}",user);
return response;
}
}