Record 형으로 DTO를 생성하기
https://s7won.tistory.com/2 블로그 기반으로 내용을 정리했다
멤버변수는 private final로 선언된다
모든 멤버변수를 인자로 하는 public 생성자를 자동으로 생성한다
@AllArgsConstructor
와 유사하지만, record는 불변 데이터를 다루므로 생성자가 실행될 때 인스턴트 필드를 수정할 수 없다
equals, hashcode, toString을 자동으로 생성한다
기본생성자는 제공하지 않으므로 필요한 경우 직접 생성해야 한다
먼저 기본 클래스로 만든 DTO이다
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class PayLogRequestDto {
private String codeNumber;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime date;
private Short type;
private int innerPoint;
private String chargerId;
private String verifyKey;
private String studentName;
public PayLog toEntity() {
return PayLog.builder()
.codeNumber(codeNumber)
.date(LocalDateTime.now())
.innerPoint(innerPoint)
.chargerId("kiosk")
.verifyKey("test")
.studentName(studentName)
.build();
}
}
다음은 record형으로 만든 DTO이다
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
public record PayLogRequestDto(
String codeNumber,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime date,
Short type,
int innerPoint,
String chargerId,
String verifyKey,
String studentName
) {
@Builder
public PayLogRequestDto(
String codeNumber,
Short type,
int innerPoint,
String chargerId,
String verifyKey,
String studentName
) {
this.codeNumber = codeNubmer;
this.type = type;
this.innerPoint = innerPoint;
this.chargerId = chargerId;
this.verifyKey = verifyKey;
this.studentName = studentName;
}
public PayLog toEntity() {
return PayLog.builder()
.codeNumber(codeNumber)
.date(LocalDateTime.now())
.type(type)
.innerPoint(innerPoint)
.chargerId("kiosk")
.verifyKey("test")
.studentName(studentName)
.build();
}
}
Getter는 자동으로 생성되지만
PayLogRequestDto payLog = payLogRepository.findByCodeNumber(String codeNumber);
보통 같으면
payLog.getCodeNumber();
와 같이 getter를 사용하겠지만
멤버변수의 이름으로
payLog.codeNumber();
다음과 같이 메서드를 만들었다