Backend/Spring
#10 유저 조회 API
RadderNepa
2023. 8. 12. 02:31
[API Specification(API 명세)]
1. HTTP Method → GET
2. HTTP Path → /user
3. 쿼리 없음
4. API 반환 결과 → [{"id" : Long, "name" : String, "age" : Integer}, ...] → JSON 형
* Controller에서 getter가 있는 객체를 반환하면 JSON이 된다.
- Spring이 자체적으로 getter를 JSON 형식으로 변환해주는 것이다.
- 이것은 @RestController Annotation을 붙였기에 가능한 것이다.
@RestController = @Controller + @ResponseBody
[Controller]
@RestController
public class UserController {
private final List<User> users = new ArrayList<User>();
@PostMapping("/user")
public void saveUser(@RequestBody UserCreateRequest request) {
users.add(new User(request.getName(), request.getAge()));
}
@GetMapping("/user")
public List<UserResponse> getUsers() {
List<UserResponse> responses = new ArrayList<>();
for (int i = 0; i < users.size(); i++) {
responses.add(new UserResponse((i + 1), users.get(i)));
}
return responses;
}
}
[DTO]
public class UserResponse {
private long id;
private String name;
private Integer age;
public UserResponse(long id, User user) {
this.id = id;
this.name = user.getName();
this.age = user.getAge();
}
public long getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
[domain]
public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
if(name == null || name.isBlank()) throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.", name));
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}