Thẻ

#spring

99 Ngày Spring — Ngày 23: Spring Data JPA repository

Ngày 23 của 99 Ngày Spring: Spring Data JPA repository — JpaRepository với bộ CRUD có sẵn trên một interface trống, phả hệ Repository → CrudRepository → JpaRepository và cơ chế proxy trên SimpleJpaRepository, derived query sinh truy vấn từ tên method với lưới fail-fast lúc khởi động.

19 thg 8, 20266 phút31
99 Ngày Spring — Ngày 22: Entity mapping cơ bản

Ngày 22 của 99 Ngày Spring: entity đầu tiên với @Entity/@Id và lý do bắt buộc no-arg constructor (entity là class, không phải record), chiến lược sinh khóa IDENTITY vs SEQUENCE trên PostgreSQL, @Column với ràng buộc và ánh xạ kiểu — wrapper cho cột nullable, cùng show-sql và quy ước snake_case.

18 thg 8, 20266 phút128
99 Ngày Spring — Ngày 21: JPA & Hibernate tổng quan

Ngày 21 của 99 Ngày Spring, mở đầu giai đoạn Spring Data JPA: impedance mismatch giữa đối tượng và bảng quan hệ, phân vai JPA (đặc tả) — Hibernate (cài đặt) — Spring Data JPA (tầng tiện ích), EntityManager với persistence context, và lựa chọn ddl-auto đúng cho từng môi trường.

17 thg 8, 20267 phút36
99 Ngày Spring — Ngày 20: CORS

Ngày 20 của 99 Ngày Spring: same-origin policy — luật của trình duyệt, preflight OPTIONS và vì sao một lần gọi sinh hai request, cấu hình @CrossOrigin và global theo profile, cùng các quy tắc an toàn: không mở * ở production, đọc lỗi CORS ở DevTools, và cái bẫy khi thêm Spring Security.

16 thg 8, 20266 phút36
99 Ngày Spring — Ngày 19: Upload & download file

Ngày 19 của 99 Ngày Spring: upload với MultipartFile và tên lưu trữ do server sinh, giới hạn max-file-size/max-request-size với lỗi 413 chuẩn ProblemDetail, download stream qua Resource với Content-Disposition, chặn path traversal bằng normalize + startsWith, và checklist an toàn cho production.

15 thg 8, 20265 phút172
99 Ngày Spring — Ngày 18: Phân trang & sắp xếp API

Ngày 18 của 99 Ngày Spring: vì sao không trả cả bảng trong một response, Pageable tự bind page/size/sort từ query param, bọc Page thành PageResponse DTO để giữ hợp đồng ổn định, convention sắp xếp nhiều tiêu chí, và hai chốt an toàn — giới hạn max-page-size, whitelist field được sort.

14 thg 8, 20265 phút163
99 Ngày Spring — Ngày 17: Mapping DTO với MapStruct

Ngày 17 của 99 Ngày Spring: vì sao không trả thẳng entity, chi phí ẩn của map thủ công, MapStruct sinh code mapping lúc biên dịch từ interface khai báo, tùy biến với @Mapping và @MappingTarget, cùng unmappedTargetPolicy = ERROR biến field bỏ sót thành lỗi build.

13 thg 8, 20266 phút105
99 Ngày Spring — Ngày 16: Xử lý lỗi toàn cục

Ngày 16 của 99 Ngày Spring: tập trung xử lý lỗi về một điểm với @RestControllerAdvice + @ExceptionHandler, chuẩn hóa body lỗi theo ProblemDetail (RFC 7807), kiểm soát response cho lỗi validation của @Valid, và handler dự phòng cho 500 — log chi tiết ở server, trả thông điệp chung cho client.

12 thg 8, 20266 phút50
99 Ngày Spring — Ngày 15: ResponseEntity & status code

Ngày 15 của 99 Ngày Spring: bảng status code tối thiểu (200/201/204/400/404/409/500) với ranh giới 4xx vs 5xx, ResponseEntity điều khiển status–header–body, nghi thức 201 Created + Location cho POST, 204 cho DELETE, và nguyên tắc "lỗi thì ném, đừng tự build".

11 thg 8, 20265 phút43