SpringBoot 画面から日時項目を受信@DateTimeFormat

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

目次

サンプル 画面から@DateTimeFormatを使用して日時項目を受信
  送信の画面
  データを格納するクラス(SyainForm.java)
  コントローラのクラス(MainController.java)
  送受信するファイル(index.html)

画面から@DateTimeFormatを使用して日時項目を受信

画面(index.html)から項目を送信しコントローラクラス(MainController.java)で受信します。
データを格納するクラス(SyainForm.java)で、日時のデータ型は@DateTimeFormatを使用して格納しそのデータを返します。

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

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

送信の画面

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 org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

@Data
public class SyainForm {

	private String name;

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

	@DateTimeFormat(pattern = "HH:mm:ss")
	private LocalTime localTime;

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

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

上記の日時項目に@DateTimeFormatをつけています。ないとエラーになります。
@JsonFormatは、JSONで値を返すために使用しています。

 

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

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {

	@GetMapping("/")
	public String write1() {
		return "test1/index";
	}

	@PostMapping("/check")
	@ResponseBody
	public SyainForm disp(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.175
		System.out.println(syainForm.getDate());// Wed Oct 06 23:47:22 JST 2021

		return syainForm;
	}
}

19-22行目は受信した日時の値を表示しています。
19行目のLocalDateはハイフン(-)区切りになっています。
21行目のLocalDateTimeは日と時間の間にTがあります。
22行目のDateは、Wed Oct・・・になっています。

送受信するファイル(index.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
	<meta charset="utf-8" />
	<title>check</title>
</head>

<body>
	<form method="post">
		<p><input type="text" name="name" value="suzuki" /></p>
		<p><input type="text" name="localDate" value="2022/02/05" /></p>
		<p><input type="text" name="localTime" value="23:47:22" /></p>
		<p><input type="text" name="localDateTime" value="2021/10/06 23:47:22.175" /></p>
		<p><input type="text" name="date" value="2021/10/06 23:47:22.175" /></p>
		<p><input type="button" id="button1" value="送信" /></p>
	</form>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
	<script>
		$(function () {
			$("#button1").click(function () {
				$.ajax({
					url: "/check",
					type: "POST",
					data: $("form").serialize(),
					dataType: "json",
					timespan: 1000,
				})
					.done(function (data1, textStatus, jqXHR) {
						console.log(jqXHR.status); // 200
						console.log(data1["name"]); // suzuki
						console.log(data1["localDate"]); // 2022-02-05
						// @JsonFormat使用時、2022/02/05
						console.log(data1["localTime"]); // 23:47:22
						console.log(data1["localDateTime"]); //2021-10-06T23:47:22.175
						// @JsonFormat使用時、2021/10/06 23:47:22.175
						console.log(data1["date"]); //2021-10-06T14:47:22.175+00:00
						// @JsonFormat使用時、2021/10/06 14:47:22.175
					})
					.fail(function (jqXHR, textStatus, errorThrown) {
						console.log(jqXHR.status); //例:404
						console.log(textStatus); //例:error
						console.log(errorThrown); //例:NOT FOUND
					})
					.always(function () {
						console.log("complete"); // complete
					});
			});
		});
	</script>
</body>

</html>

33行目は、 @JsonFormat使用でスラッシュ(/)区切りになっています。

関連の記事

SpringBoot 例外のサンプル(ControllerAdvice)

△上に戻る