공부/spring
DTO
qlek1108
2023. 5. 1. 16:07
목적 | 데이터 양 | http 동사 | 결과 | ||
PatchDto | 이미 존재하는 리소스의 일부를 수정 | 수정 되는 필드만 포함하는 객체 사용 일부 필드만 변경하고 싶을 때 사용 |
PATCH 메서드와 함께 사용 | 존재 리소스 수정 수정 리소스 반환 |
데이터 전송을 위해 사용되지만 각각 다른 목적, 데이터양, HTTP동사를 가진다 |
PostDto | 리소스 만들기 클라이언트가 서버에세 새로운 데이터 전송 |
모든 필드 값을 포함하는 완전 데이터 객체 요구 | POST 메서드와 함께 사용 | 새로운 리소스 생성 생성 리소스 반환 |
CoffeeController |
|
postCoffee() |
|
patchCoffee() |
|
// 1. DTO 클래스 및 유효성 검증을 적용하세요.
@PostMapping
public ResponseEntity postCoffee(@Valid CoffeePostDto coffeePostDto
//@Valid http요청 본문에 있는 데이터가 유효한지 검사
){
return new ResponseEntity<>(coffeePostDto, HttpStatus.CREATED);
}
// 2. DTO 클래스 및 유효성 검증을 적용하세요.
@PatchMapping("/{coffee-id}")
public ResponseEntity patchCoffee(@PathVariable("coffee-id") @Positive long coffeeId,
//@Positive 양수인지 검사
@Valid @RequestBody CoffeePatchDto coffeePatchDto){
coffeePatchDto.setCoffeeId(coffeeId);
//coffeePatchDto객체의 setCoffeeId메소드를 호출하여 coffeeId 값을 설정
//http요청 본문의로 전달된 coffeePatchDto 객체에 coffeeId 필드가 없어서 명시적으로 설정
return new ResponseEntity<>(coffeePatchDto, HttpStatus.OK);
//객체 생성후 http 응답 본문으로 coffeePatchDto 객체와 상태코드를 반환
}
package com.codestates.coffee;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
public class CoffeePatchDto {
private long coffeeId;
@NotBlank(message = "이름은 공백이 아니어야 합니다.")
private String korName;
@Pattern(regexp="^([a-zA-Z])(\\s?[a-zA-Z])*$",message = "영어 이름은 영문(대소문자 모두 가능)으로 이루어져야 하며 공백이 아니어야 합니다.")
private String engName;
@Range(min=100, max=50000)
private int price;
public long getCoffeeId() {
return coffeeId;
}
public void setCoffeeId(long coffeeId) {
this.coffeeId = coffeeId;
}
public String getKorName() {
return korName;
}
public void setKorName(String korName) {
this.korName = korName;
}
public String getEngName() {
return engName;
}
public void setEngName(String engName) {
this.engName = engName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
package com.codestates.coffee;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
public class CoffeePostDto {
private long coffeeId;
@NotBlank(message = "이름은 공백이 아니어야 합니다.")
private String korName;
@Pattern(regexp="^([a-zA-Z])(\\s?[a-zA-Z])*$",message = "영어 이름은 영문(대소문자 모두 가능)으로 이루어져야 하며 공백이 아니어야 합니다.")
private String engName;
@Range(min=100, max=50000)
private int price;
public long getCoffeeId() {
return coffeeId;
}
public void setCoffeeId(long coffeeId) {
this.coffeeId = coffeeId;
}
public String getKorName() {
return korName;
}
public void setKorName(String korName) {
this.korName = korName;
}
public String getEngName() {
return engName;
}
public void setEngName(String engName) {
this.engName = engName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}