SpringBoot restで日時項目を受信@JsonFormat

Spring Bootのrestで@JsonFormatを使用して日時項目を受信するサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)

目次

サンプル restで@JsonFormatを使用して日時項目を受信する
  送信するJSON
  データを格納するクラス(SyainForm.java)
  コントローラのクラス(MainController.java)
  受信するJSON

restで@JsonFormatを使用して日時項目を受信する

JSONデータを送信しコントローラクラス(MainController.java)で受信します。
データを格納するクラス(SyainForm.java)で、日時のデータ型は@JsonFormatを使用して格納しそのデータを返します。

以下のURLでアクセスします。
http://localhost:8765

githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-JsonFormat

送信するJSON

{
    "name": "suzuki",
    "localDate": "2022/02/05",
    "localtime": "23:47:22",
    "localDateTime": "2021/10/06 23:47:22.171",
    "date": "2021/10/06 23:47:22.175"
}

JavaのLocalDate型、LocalTime型、LocalDateTime型、Date型の項目にデータを送信します。

 

データを格納するクラス(SyainForm.java)

package com.example.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

@Data
public class SyainForm {

	private String name;

	@JsonFormat(pattern = "yyyy/MM/dd")
	private LocalDate localDate;

	private LocalTime localtime;

	@JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss.SSS")
	private LocalDateTime localDateTime;

	@JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss.SSS" ,timezone = "Asia/Tokyo")
//	@JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss" ,timezone = "Asia/Tokyo")
//	@JsonFormat(pattern = "yyyy/MM/dd" ,timezone = "Asia/Tokyo")
	private Date date;
}

16行目は、LocalDate型です。受信時は15行目の@JsonFormatとpatternの指定が必要です。
18行目のLocalTime型は、@JsonFormatがなくてもエラーになりません。
20行目は、LocalDateTime型です。@JsonFormatが必要です。
26行目は、Date型です。timezoneの指定が必要です。ない場合は時間がずれてしまいます。

 

コントローラのクラス(MainRestController.java)

package com.example.demo;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainRestController {

	@PostMapping("/")
	public SyainForm disp(@RequestBody SyainForm syainForm) {
		System.out.println(syainForm.getLocalDate()); // 2022-02-05
		System.out.println(syainForm.getLocaltime()); // 23:47:22
		System.out.println(syainForm.getLocalDateTime());// 2021-10-06T23:47:22.171
		System.out.println(syainForm.getDate());// Wed Oct 06 23:47:22 JST 2021

		return syainForm;
	}
}

12-15行目は受信した日時の値を表示しています。
12行目のLocalDateはハイフン(-)区切りになっています。
14行目のLocalDateTimeは日と時間の間にTがあります。
15行目のDateは、時間が9:00となっています。

受信するJSON

{
    "name": "suzuki",
    "localDate": "2022/02/05",
    "localtime": "23:47:22",
    "localDateTime": "2021/10/06 23:47:22.171",
    "date": "2021/10/06"
}

LocalDate型はスラッシュ(/)区切りになっています。
LocalDateTimeは日と時間の間のTが削除されています。

関連の記事

SpringBoot 例外のサンプル(ControllerAdvice)

△上に戻る