개발할 때
좋든 싫든 항상 날짜 형식을 보게 될 것입니다.
이 기사에서는 프로세스를 조사했습니다.
@JsonFormat 사용 LocalDateTime 및
또한 Jackson을 사용하여 날짜 형식과 사용자 정의 주석을 작성했습니다.
LocalDateTime 형식
{
"name": "hello",
"startAt": "2023-02-26T15:12:17.536Z",
"endAt": "2023-02-26T15:12:17.536Z"
}
LocalDateTime의 경우
기본적으로 알파벳은 중간에 섞입니다.
답장과 함께 보내드립니다.
{
"name": "hello",
"startAt": "2023.03.20 12:00",
"endAt": "2023.03.20 13:30"
}
응답 형식 지정
우리는 그런 요청과 답변을 할 수 없습니까?
@JsonFormat
Jackson에서 제공하는 @JsonFormat을 사용하는 경우
요청 또는 응답 필드의 날짜 형식을 JSON으로 변환할 수 있습니다.
내 요청
@Getter
@RequiredArgsConstructor
public class MyRequest {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd HH:mm", timezone = "Asia/Seoul")
private LocalDateTime startAt;
}
@JsonFormat의 샘플 필드에 원하는 날짜 형식을 입력하기만 하면 됩니다.
{
"name": "HI",
"startAt": "2023.03.20 12:00"
}
DTO 요청 필드에 @JsonFormat이 사용된 경우
필드를 사용하여 원하는 형식을 사용자 정의할 수 있습니다!
이렇게 하면 컨트롤러에서 문자열 형식으로 가져올 수 있습니다.
힘들게 개조할 필요가 없다는 큰 장점이 있습니다.
기본 답변
@Getter
@Builder
public class BasicResponse {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd HH:mm", timezone = "Asia/Seoul")
private LocalDateTime startAt;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd HH:mm", timezone = "Asia/Seoul")
private LocalDateTime endAt;
}
응답 DTO에도 동일하게 적용됩니다.
이 패턴을 준수하는 형식으로 자동 직렬화됩니다.
@DateTimeFormat
Spring에서 지원하는 주석인 @DateTimeFormat도 있습니다.
기본적으로 기본 JSON 변환기는 Spring Jackson의 것이므로 우선 순위에서 밀려납니다.
하지만 @DateTimeFormat을 사용해야 하는 곳이 있습니다.
JSON을 직렬화하지 않는 요청 매개변수 또는 모델 속성에서,
이 주석을 사용할 수 있습니다.
JSON에 @JsonFormat을 사용하세요!
맞춤 주석 @DateFormat

프로젝트 내에서 날짜 형식을 통합하려면
이렇게 모든 필드를 붙여넣어야 합니다.
코드의 길이가 길면
매개변수가 3개라서 오타가 있을 가능성이 있었습니다.
그래서 단순화하고 싶었습니다.
날짜 형식
@JacksonAnnotationsInside
@Retention(RetentionPolicy.RUNTIME)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd HH:mm", timezone = "Asia/Seoul")
public @interface DateFormat {}
이것은 @DateFormat 사용자 지정 주석입니다.
의도된 용도는 모든 @JsonFormat을 통합하는 것입니다.
재사용성을 높이기 위해.
중요한 점은 @JacksonAnnotationsInside를 추가해야 한다는 것입니다.
이 주석은 Jackson 관련 주석이 상속되어 사용됨을 의미합니다.

그것을 사용하면 매우 쉽습니다.
가독성이 높아집니다!
그러나 사용자 지정 주석의 이름을 명시적으로 지정하지 않으면
팀원들이 헷갈릴 수 있기 때문에
제대로 파악하고 팀원들과 소통해야 합니다.
