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が削除されています。
関連の記事