Thẻ
#spring

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.

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.

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.

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.

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.

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.

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.

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.
