[Spring] reqest Duo

성민·2023년 2월 4일
0

스프링 공부

목록 보기
1/15

API 서버를 개발할 때 Request를 받아올 DTO를 생성해서 사용

Entity(Member)

@Getter
@Setter
@Entity
public class Member {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String phone;

1. @RequestBody에 값 그대로 받기

``` java
@PostMapping("/members/new")
@ResponseBody
public String create(@RequestBody String name, @RequestBody String phone) {
	memberService.join(member);
	return "등록성공";
}

2. entity를 그대로 사용

@PostMapping("/members/new")
@ResponseBody
public String create(@RequestBody @Valid Member member) {
	memberService.join(member);
	return "등록성공";
}
  • Request Body를 Member로 매핑하고 사용하는 방법을 처음에 생각함
  • 일부 갚만 받아와 써야할 상황도 있는데 해당 과정은 reqeust에 불필요한 정보까지 요청하게 되는 문제가 있다.

3. dto구성

@Getter
public class AddMemberDto {
    private String name;
    private String phone;
}

@Getter
public class UpdateNameMemberDto {
    private String name;
}

@Getter
public class UpdatePhoneMemberDto {
    private String phone;
}

@PostMapping("/members/new")
@ResponseBody
public String create(@RequestBody @Valid AddMemberDto dto) {
	memberService.join(dto);
	return "등록성공";
}
  • 위의 문제들은 해결되었지만 파라미터를 받는 api마다 dto를 구성하는것은 파일트리가 상당히 지저분해졌다...

4. inner class로 dto통합


@Getter
@AllArgsConstructor
public class MenberDto {

    @Getter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Res {
        private Long id;
        private String name;

        private String phone;
    }

    @Getter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Add {
        private String name;

        private String phone;
    }

    @Getter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class UpdateName {
        private String name;
    }

    @Getter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class UpdatePhone {
        private String phone;
    }
}

0개의 댓글