상세 컨텐츠

본문 제목

SpringBoot RESTfull Service

Spring/Restfull API

by ChrisMare 2023. 9. 30. 16:00

본문

SpringBoot의 Restfull API 정리

 

옛날 Spring에서는 @Controller에 @ResponseBody를 붙여서 사용되었다가 현대에는 Spring4.0에서 정식 지원되었다.

>> @RestController

@RestController 내부에는 @Controller 와 @ResponseBody가 포함된 것을 알 수 있다.

Controller에 @ResponseBody가 있다면 서비스 응답 시 일반적으로 return type 혹은 Json 형태로 반환되어진다.

혹은 xml 및 html등 양식으로 다시 응답하고 싶다면 jackson라이브러리를 활용해서 전달하면된다.

 

또한, Controller에 RequestMapping을 사용하여 각 호출 URI의 시작점을 부여하여 중복코드를 개선할 수 있는 장점이 있다.

예를들어,

1. retrieveAllUsers를 가져오는 요청이 있고 요청 URI는 "/users"이다.

2. retrieveUser를 가져오는 요청이 있고 요청 URI는 "/user/{userId}"라고한다면

공통된 /user를 Controller에 @RequestMapping을 적용하여 공통된 부분을 제거할 수 있다.

ex) @RequestMapping("/users")

 

요청 메소드로는 4가지가 존재하며 아래와 같다.

RequestMethod Status

GET - 조회 API

POST - 생성 API

PUT - 수정 API

DELETE - 삭제 API

 

이전에는 @RequestMapping(value="/~~~", method=RequestMethod.GET) 형식으로 많이 사용되었다.

현재는 직관적으로 사용할 수 있도록 Spring에서 제공해주게 되었다.

ex) @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

 

@GetMapping

- 조회용 API에 많이 사용된다.

예를 들어) @GetMapping("/users/{id}") 가 있다.

{id}는 가변변수를 사용한것이다.

유저의 키값을 보내어 각 유저의 정보를 조회하는 API이다.

이때는 요청 파라미터에 @PathVariable를 사용하여 해당 정보를 가져온다.

ex)

@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
    User user = service.findOne(id);

    if(user == null) {
        throw new UserNotFoundException(String.format("ID[%s] not found", id));
    }

    return user;
}

만약! 회원을 생성하는 API 즉, 회원가입을 진행할 때 회원의 정보를 다 넘겨야되는경우!

이때는 어떻게 요청 파리미터를 받아야되는가?

이때 사용되는 어노테이션이 @RequestBody이다.

아래의 경우처럼 유저의 정보를 가지는 객체를 만들어서 담으면 된다.

주의) 전달되는 각 속성명의 값은 일치되어야 세팅이 된다.

@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
    User savedUser = service.save(user);

    URI location = ServletUriComponentsBuilder.fromCurrentRequest()
            .path("/{id}")
            .buildAndExpand(savedUser.getId())
            .toUri();

    return ResponseEntity.created(location).build();
}
package com.example.restfulwebservice.user;

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
//@JsonIgnoreProperties(value = {"password", "ssn"})
@JsonFilter("UserInfo") //임의 부여가능
public class User {
    private Integer id;

    @Size(min = 2, message = "Name은 2글자 이상 입력해 주세요.")
    private String name;
    @Past
    private Date joinDate;

    // @JsonIgnore: 요청 내용에서 해당 필드 제외 처리
//    @JsonIgnore
    private String password;
//    @JsonIgnore
    private String ssn;
}

 

'Spring > Restfull API' 카테고리의 다른 글

SpringBoot - Error Handling  (0) 2023.09.30

관련글 더보기

댓글 영역