Spring boot 원하는 응답 만드는 방법

Gihongg·2024년 3월 16일

Spring Boot

목록 보기
7/24

원래 코드

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;
    }
}

원하는 응답을 만들어 보내는 방법

원하는 응답을 보내기 위해서는 메서드의 반환값을 응답으로 만들어주어야 한다.

1. public ResponseEntity<UserInfo> user()

user메서드의 반환값을 바꿔주자 위와 같이 바꿔주자.

user메서드의 반환값을 ResponseEntity<UserInfo>으로 바꿔준다.
:ResponseEntity는 Spring에서 HTTP 응답을 표현하는 클래스입니다. HTTP 응답의 상태 코드, 헤더 및 본문을 나타낼 수 있습니다.
여기서 UserInfo는 ResponseEntity가 포함하고 있는 HTTP 응답의 본문(body)의 타입을 나타냅니다. 즉, 이 응답은 UserInfo 객체를 본문으로 가지고 있음을 의미합니다.

2. var response = ResponseEntity.status(HttpStatus.ACCEPTED).header("x-custom","hi").body(user);

응답할 객체를 만들어주자.
이 응답의 상태는 ACCEPTED, http 헤더는 x-custom, hi가 된다. body로는 user객체가 들어가도된다.

그렇기 때문에 위의 public ResponseEntity<UserInfo> user()에서 제너릭타입을 UserInfo로 정해준 것 이다.

3. return response;

생성한 응답을 반환해준다.

변경된 전체 코드

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;
    }
}
profile
전천후 개발자

0개의 댓글