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;
}
SpringBoot - Error Handling (0) | 2023.09.30 |
---|
댓글 영역