파일 명: C/git-practice/be-homework-dto

DTO 실습 개요

CoffeePostDto.java

package com.springboot.coffee;

import com.springboot.member.NotSpace;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.*;

@Setter
@Getter
public class CoffeePostDto {

    @NotBlank
    @Pattern(regexp = "^[가-힣]*$")
    private String korName;

    @NotBlank
    @Pattern(regexp = "^[a-zA-Z]+(\\\\s?[a-zA-Z]+)*$", message = "알파벳 대소문자(a~z, A~Z)만 입력 가능합니다.")
    private String engName;

    @Range(min = 100, max = 50000, message = "100~50000")
    private Integer price;
}

CoffeePatchDto.java

package com.springboot.coffee;

import com.springboot.member.NotSpace;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.*;

@Getter
@Setter
public class CoffeePatchDto {

    private long coffeeId;

    @Pattern(regexp = "^[가-힣]*$")
    @NotSpace(message = "korName은 공백이 아니어야 합니다")
    private String korName;

    @NotSpace
    @Pattern(regexp = "^[a-zA-Z]+(\\\\s[a-zA-Z]+)*$", message = "알파벳 대소문자(a~z, A~Z)만 입력 가능합니다.")
    private String engName;

    @Range(min = 100, max = 50000, message = "100~50000")
    private Integer price;

}

CoffeeController.java

package com.springboot.coffee;

import com.springboot.member.MemberPatchDto;
import com.springboot.member.MemberPostDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.Min;
import java.util.HashMap;
import java.util.Map;

@Validated
@RestController
@RequestMapping("/v1/coffees")
public class CoffeeController {
    // 1. DTO 클래스 및 유효성 검증을 적용하세요.
    @PostMapping
    public ResponseEntity postCoffee(@Valid @RequestBody CoffeePostDto coffeePostDto) {
        return new ResponseEntity<>(coffeePostDto, HttpStatus.CREATED);
    }

    // 2. DTO 클래스 및 유효성 검증을 적용하세요.
    @PatchMapping("/{coffee-id}")
    public ResponseEntity patchCoffee(@PathVariable("coffee-id") @Min(1) long coffeeId,
                                      @Valid @RequestBody CoffeePatchDto coffeePatchDto) {
        coffeePatchDto.setCoffeeId(coffeeId);

        // No need Business logic

        return new ResponseEntity<>(coffeePatchDto, HttpStatus.OK);
    }

    @GetMapping("/{coffee-id}")
    public ResponseEntity getCoffee(@PathVariable("coffee-id") long coffeeId) {
        System.out.println("# coffeeId: " + coffeeId);

        // not implementation

        return new ResponseEntity<>(HttpStatus.OK);
    }

    @GetMapping
    public ResponseEntity getCoffees() {
        System.out.println("# get Coffees");

        // not implementation

        return new ResponseEntity<>(HttpStatus.OK);
    }

    @DeleteMapping("/{coffee-id}")
    public ResponseEntity deleteCoffee(@PathVariable("coffee-id") long coffeeId) {
        // No need business logic

        return new ResponseEntity(HttpStatus.NO_CONTENT);
    }
}