[解決済み] SpringでLocalDateTime RequestParamを使用するには?StringからLocalDateTimeへの変換に失敗しました」と表示される。
2022-11-07 02:03:21
質問
Spring Bootを使用していて
jackson-datatype-jsr310
をMavenと一緒に使っています。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.7.3</version>
</dependency>
Java 8 の Date/Time 型の RequestParam を使おうとすると。
@GetMapping("/test")
public Page<User> get(
@RequestParam(value = "start", required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime start) {
//...
}
で、このURLでテストしてください。
/test?start=2016-10-8T00:00
以下のようなエラーが出ます。
{
"timestamp": 1477528408379,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.method.annotation.MethodArgumentTypeMismatchException",
"message": "Failed to convert value of type [java.lang.String] to required type [java.time.LocalDateTime]; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value '2016-10-8T00:00'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2016-10-8T00:00]",
"path": "/test"
}
どのように解決するのですか?
TL;DR
- で文字列としてキャプチャできます。
@RequestParam
を使うか、Springに追加で文字列をパースさせてjavaの日付/時刻クラスにすることができます。
@DateTimeFormat
を使うこともできます。
は
@RequestParam
は = 記号の後に指定した日付を取得するのに十分ですが、 メソッドに来るのは
String
. それがキャスト例外を投げる理由です。
これを実現するには、いくつかの方法があります。
- 日付を自分で解析し、文字列として値を取得する。
@GetMapping("/test")
public Page<User> get(@RequestParam(value="start", required = false) String start){
//Create a DateTimeFormatter with your required format:
DateTimeFormatter dateTimeFormat =
new DateTimeFormatter(DateTimeFormatter.BASIC_ISO_DATE);
//Next parse the date from the @RequestParam, specifying the TO type as
a TemporalQuery:
LocalDateTime date = dateTimeFormat.parse(start, LocalDateTime::from);
//Do the rest of your code...
}
- 日付フォーマットを自動的にパースして期待するSpringの機能を活用する。
@GetMapping("/test")
public void processDateTime(@RequestParam("start")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
LocalDateTime date) {
// The rest of your code (Spring already parsed the date).
}
関連
-
[解決済み] Springのセキュリティ認証の例外を@ExceptionHandlerで処理する
-
[解決済み] Spring Data JPAでネイティブクエリ結果をNon-Entity POJOにマップする。
-
[解決済み] Spring Hibernate - 現在のスレッドでトランザクションに同期したセッションを取得できませんでした。
-
[解決済み] Spring Boot - 実行中のポートを取得する方法
-
[解決済み] Spring Dataです。"delete by "はサポートされていますか?
-
[解決済み] Spring Boot JPA - 自動再接続の設定
-
[解決済み] Spring CrudRepositoryで大文字小文字を区別しないクエリ
-
[解決済み] 同じurlパターンに対して異なる引数で2つのメソッドを作成する
-
[解決済み] なぜ春になると静電場が自動化されないのか?
-
[解決済み] Spring: 静的フィールドに値を注入するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Spring Data JPAでネイティブクエリ結果をNon-Entity POJOにマップする。
-
[解決済み] Spring Hibernate - 現在のスレッドでトランザクションに同期したセッションを取得できませんでした。
-
[解決済み] Spring Boot Rest Controllerは、異なるHTTPステータスコードを返すには?
-
[解決済み] java:comp/env/は何をするところですか?
-
[解決済み] Spring @PostConstruct と init-method 属性の比較
-
[解決済み] Spring Boot - 実行中のポートを取得する方法
-
[解決済み] Spring CrudRepositoryで大文字小文字を区別しないクエリ
-
[解決済み] Maven依存性 spring-webとspring-webmvcの比較
-
[解決済み] 同じurlパターンに対して異なる引数で2つのメソッドを作成する
-
[解決済み] Spring BootとMongoDBへの接続設定方法