📋
Request & Response Design

DTO Design

Data Transfer Objects
💡 DTO (Data Transfer Object), EK "GIFT WRAPPING" hai — INTERNAL, DATABASE ENTITY (RAW GIFT) ko, DIRECTLY, CLIENT ko, NAHI DIKHATE — EK CLEAN, CONTROLLED "WRAPPING" (DTO) mein, PACK karके, BHEJTE hain, TAAKI, INTERNAL DETAILS (jaise PASSWORD HASH), ACCIDENTALLY, EXPOSE NA HO.

DTO, EK SIMPLE, PLAIN OBJECT hai, JO, API REQUEST/RESPONSE ke liye, SPECIFICALLY, DESIGN kiya jaata hai — DATABASE ENTITY (jaise @Entity User) SE, ALAG. ENTITY ko, DIRECTLY, API mein, EXPOSE karna, RISKY hai — INTERNAL FIELDS (jaise passwordHash), ACCIDENTALLY, LEAK ho sakte hain, aur ENTITY STRUCTURE CHANGE karne PAR, API CONTRACT bhi, BREAK ho sakta hai.

ALAG DTOs, ALAG OPERATIONS ke liye, BANAI ja sakti hain — jaise UserCreateDto (password FIELD, INCLUDE), UserResponseDto (password FIELD, EXCLUDE, LEKIN id, createdAt, INCLUDE). Ye SEPARATION, SECURITY aur FLEXIBILITY, DONO DETA hai.

@Entity
public class User {
    @Id private Long id;
    private String name;
    private String email;
    private String passwordHash;   // INTERNAL, kabhi expose NAHI hona chahiye
}

// Response ke liye — password EXCLUDE:
public class UserResponseDto {
    private Long id;
    private String name;
    private String email;
    // passwordHash, YAHA NAHI hai — API se, KABHI expose NAHI hota
}

// Create request ke liye — id EXCLUDE (server generate karega):
public class UserCreateDto {
    @NotBlank private String name;
    @Email private String email;
    @NotBlank private String password;
}
📋
DTO (Data Transfer Object), EK "GIFT WRAPPING" hai — INTERNAL, DATABASE ENTITY (RAW GIFT) ko, DIRECTLY, CLIENT ko, NAHI DIKHATE — EK CLEAN, CONTROLLED "WRAPPING" (DTO) mein, PACK karके, BHEJTE hain, TAAKI, INTERNAL DETAILS (jaise PASSWORD HASH), ACCIDENTALLY, EXPOSE NA HO.
1 / 6
⚡ Quick Recap
  • DTO = API-specific object, database entity se ALAG
  • Entity DIRECTLY expose karna, SECURITY RISK hai (internal fields leak ho sakte hain)
  • Alag operations (create/response) ke liye, ALAG DTOs BANAI ja sakti hain
Is page mein (2 subtopics)

MapStruct, COMPILE-TIME PAR, ENTITY ↔ DTO MAPPING CODE, AUTOMATICALLY, GENERATE karta hai — MANUAL, GETTER/SETTER-BY-GETTER/SETTER, MAPPING CODE, LIKHNE ki, ZAROORAT NAHI, aur, REFLECTION-BASED LIBRARIES (jaise, ModelMapper) SE, FASTER hai (RUNTIME OVERHEAD NAHI).

@Mapper(componentModel = "spring")
public interface ProductMapper {
    ProductResponseDto toDto(Product entity);
    Product toEntity(ProductCreateDto dto);
}
// Implementation, COMPILE TIME par, AUTOMATICALLY generate hoती hai

Java 17+ RECORDS, DTOs banaने ka, EK, CONCISE, MODERN WAY hain — IMMUTABLE, AUTOMATICALLY, GETTERS/equals()/hashCode()/toString() GENERATE HOTE hain, BOILERPLATE, DRAMATICALLY, KAM ho jaata hai.

public record ProductResponseDto(Long id, String name, BigDecimal price) { }
// Automatically: getters (name(), price()), equals(), hashCode(), toString()