Spring Boot/API를 작성하는 다양한 방법

[Spring boot] PUT API 만들기

재윤 2025. 8. 14. 08:35
반응형
import com.springboot.api.dto.MemberDto;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1/put-api")
public class PutController {
    // <http://localhost:8080/api/v1/put-api/default>
    @PutMapping(value = "/default")
    public String putMethod() {
        return "Hello World!";
    }
}

 

@RequestBody

    // <http://localhost:8080/api/v1/put-api/member>
    @PutMapping(value = "/member")
    public String postMember(@RequestBody Map<String, Object> putData) {
        StringBuilder sb = new StringBuilder();

        putData.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "\\n");
        });

        return sb.toString();
    }
    // <http://localhost:8080/api/v1/put-api/member1>
    @PutMapping(value = "/member1")
    public String postMemberDto1(@RequestBody MemberDto memberDto) {
        return memberDto.toString();
    }

    // <http://localhost:8080/api/v1/put-api/member2>
    @PutMapping(value = "/member2")
    public MemberDto postMemberDto2(@RequestBody MemberDto memberDto) {
        return memberDto;
    }

 

  • 첫번째 응답값은 String 타입, 두 번째는 DTO 객체 타입

 

 

 

응답값 String 타입? DTO 타입?

무슨 차이?

  • String 타입을 보면 HEADERS 항목의 content-type을 보면 text/plain으로서 결과값으로 일반 문자열이 전달
  • DTO 타입을 보면 HEADERS 영역의 Content-Type 항목에서 application/json 형식으로 전달됨
    • 4장에서 배운 RestController 애너테이션이 지정된 클래스는 @ResponseBody를 생략할 수 있음 이 애너테이션은 자동으로 값을 JSON과 같은 형식으로 변환해서 전달하는 역할 수행

 

 

@ResponseEntity 및 HttpEntity 클래스

  • 스프링 프레임워크 httpEntity라는 클래스가 있다. 헤더와 body로 구성된 http 요청과 응답을 구성하는 역할 수행

public class HttpEntity<T>{
	private final HttpHeaders headers;
	
	@Nullable
	private final T body;
}
  • ResponseEntity는 서버에 들어온 요청에 대해 응답 데이터를 구성해서 잔달할 수 있게한다.
  • 다음과 같이 ResponseEntity는 HttpEntity로 부터 HttpHeaders와 Body를 가지고 자체적으로 HttpStatus를 구현
public class ResponseEntity<T> extends HttpEntity<T> {
	private final HttpStatusCode status;
}

 

  • 이 클래스를 활용하면 응답 코드 변경은 물론 Header와 Body를 더욱 쉽게 구성할 수 있다.
    // <http://localhost:8080/api/v1/put-api/member3>
    @PutMapping(value = "/member3")
    public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto) {
        return ResponseEntity
                .status(HttpStatus.ACCEPTED)
                .body(memberDto);
    }

반응형