up1 / assignment-java-boot-camp

8 stars 103 forks source link

สอบถามการทำ Request Body หน่อยครับ #23

Open wavemoroc001 opened 2 years ago

wavemoroc001 commented 2 years ago

เวลาที่ต้องการรับ RequestBody ตอนนี้จะใช้วิธีการสร้าง pojo class ขึ้นมาตาม Request ที่จะส่งข้อมูลมาตาม code ด้านล่าง เลยอยากสอบถามว่าพอมีท่าการทำที่ดีกว่าอันนี้ไหมครับ ผมรู้สึกว่ายิ่งเรามี endpoint มากขึ้น เราจำเป็นต้องสร้าง class pojo มากขึ้นตามไปด้วยอะครับ ?

Endpoint

    @PostMapping("/addShippingAddress")
    public ResponseEntity<?> addShippingAddress(@RequestBody @Valid RequestShippingAddress address) {
        return ResponseEntity.ok().body(customerService.addShippingAddress(address));
    }

POJO Class

@NoArgsConstructor
@Getter
@Setter
@AllArgsConstructor
public class RequestShippingAddress {

    @NotNull
    private Long customerId;
    @NotBlank
    private String address;
    @NotBlank
    @Length(min = 5, max = 5)
    private String zipCode;
    @NotBlank
    private String province;
    @NotBlank
    @Length(min = 10, max = 10)
    private String phoneNumber;
}
up1 commented 2 years ago

เป็นปกติครับ

ดังนั้นส่วนนี้เรามักจะ generateจาก JSON message เอาครับ ไม่เขียนเอง

up1 commented 2 years ago

ควรระบุไปด้วยว่า type อะไร ResponseEntity<?>

up1 commented 2 years ago

แต่หลาย ๆ ครั้งเห็นชอบ reuse กัน หรือ extend class กัน ตรงนี้ต้องระวังเรื่อง side effect จากการเปลี่ยนแปลง ว่าจะกระทบเยอะไหม

wavemoroc001 commented 2 years ago

สอบถามเพิ่มเติมหน่อยครับ กรณีที่เรามี entity ที่มีความซับซ้อนมากๆ แล้วเวลา return entity นั้นกลับไปทาง Frontend มันได้ JSON ที่มี Level ค่อนข้างลึกอะครับ พอมีวิธีการ manage หรือ Tools ในการจัดการไหมครับ ? ปล. ตอนนั้นผมใช้วิธีการปั้น POJO Class ขึ้นมาแล้ว return ไปตามแต่ละ endpoint ที่ FrontEnd อยากได้ครับ

Entity Class Relation

Product have many ProductDetail

Response

{
    "product": {
        "id": 1234,
        "name": "iphone",
        "price": 12666,
        "warranty_year": "3 Years",
        "product_details": [
            {
                "productDetailId": 1,
                "description": "lorem ipsum",
                "images": [
                    "img1.jpg",
                    "img2.jpg"
                ],
                "quantity": 3
            }
        ]
    }
}
up1 commented 2 years ago

ต้องปั้น Response ไปตาม frontend ที่กำหนดครับ เพราะว่า ต้องทำให้เหมาะสมกับ frontend หรือ ผู้ใช้งานครับ สิ่งที่ต้องทำคือ

ไม่งั้นต้อง provide data ให้ แล้วเอา GraphQL มากั้นครับ แต่จะซับซ้อนขึ้นอีกนะครับ

wavemoroc001 commented 2 years ago

อ้อ โอเครครับ ขอบคุณครับบ