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

목록이 잘 나온다.