728x90
Spring Boot에서는 전역적으로 적용되는 날짜 및 시간 형식을 지정할 수 있습니다. 이를 통해 코드에서 중복되는 날짜 및 시간 형식 코드를 제거하고 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.
여러가지 방안이 있겠습니다만 저는 아래같은 방식으로 진행해왔으니 참고하시면 될것 같습니다.
@JsonFormat 어노테이션
@Data
public class MyDateTime {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
private Date dateTime;
}
WebMvcConfigurer
인터페이스 구현
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.timeZone(TimeZone.getDefault());
return builder;
}
}
postman 으로 테스트 할 controller 를 하나 만들어보겠습니다.
@RestController
@RequestMapping("/")
public class dataController {
@GetMapping("/dateTime")
public MyDateTime getMyDateTime() {
MyDateTime myDateTime = new MyDateTime();
myDateTime.setDateTime(new Date());
return myDateTime;
}
}
@JsonComponent 어노테이션 사용하는 방법
CustomDateSerializer
를 작성합니다.
public class CustomDateSerializer extends JsonSerializer<Date> {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@Override
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeString(dateFormat.format(value));
}
}
CustomDateDeserializer
를 작성 합니다.
public class CustomDateDeserializer extends JsonDeserializer<Date> {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
JsonNode node = jp.getCodec().readTree(jp);
String dateString = node.textValue();
try {
return dateFormat.parse(dateString);
} catch (ParseException e) {
throw new IOException("Invalid date format: " + dateString, e);
}
}
}
새로운 응답형식으로 객체 하나 더 만들어 볼게요.
@Data
public class MyResponse {
private String message;
private Date timestamp;
}
마지막으로 postman 이 호출할 controller 를 하나 추가로 만들어 볼게요.
public class MyController {
@GetMapping("/myEndpoint")
public MyResponse getMyResponse() {
MyResponse response = new MyResponse();
response.setMessage("안녕! 난 블레이크야!");
response.setTimestamp(new Date());
return response;
}
}
이상으로 어노테이션 하나로 전역시간에 대한 처리하는 방법을 대략적으로 알아봤습니다.
내저장소 바로가기 luxury515
'Back-end > 기타' 카테고리의 다른 글
람다 10가지 (초급편) (0) | 2023.05.16 |
---|---|
10가지 Lambda (0) | 2023.05.16 |
RequestBodyAdvice 와 ResponseBodyAdvice 사용법 (0) | 2023.04.17 |
@Transactionl 이 무용지물이 된 케이스 (0) | 2023.04.17 |
유효성체크,예외처리,응답메시지에 대한 공통처리. (0) | 2023.04.17 |