0

Web アプリケーションでは、Twitter ブートストラップを使用します。サーバー側では、Spring REST を使用します。

私はbootstrap-datetimejsを使用しています。

2 つの異なる日付形式を使用します。

$('#birthdatepicker').datetimepicker({
    viewMode: 'years',
    format: 'DD/MM/YYYY',
    allowInputToggle: true
});

$('#expirationDateCard1, #expirationDateCard2').datetimepicker({
        format: 'MM/YYYY'
});

ajax 呼び出しで投稿すると、応答は次のようになります。

"{"timestamp":1436453221365,"status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"Could not read document: Can not construct instance of java.util.Date from String value '09/07/2015': not a valid representation (error: Failed to parse Date value '09/07/2015': Can not parse date \"09/07/2015\": not compatible with any of standard forms (\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\", \"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", \"EEE, dd MMM yyyy HH:mm:ss zzz\", \"yyyy-MM-dd\"))\n at [Source: java.io.PushbackInputStream@2e700ae1; line: 1, column: 83] 

自動的に変換を行うユーティリティはありますか?

4

4 に答える 4

2

サーバーが伝えていることを読む

"timestamp": 1436453221365,

問題が発生したとき

"status": 400,
"error": "Bad Request",

リクエストに問題がありました

"exception": "org.springframework.http.converter.HttpMessageNotReadableException",

問題はJavaインタープリターから発生しており、詳細なメッセージは次のとおりです。

java.util.Dateドキュメントを読み取れませんでした:文字列値からのインスタンスを構築できません'09/07/2015': 有効な表現ではありません
(エラー: 日付値の解析に失敗しました: 日付を解析'09/07/2015'できません: 標準形式 ( 、、)"09/07/2015"のいずれとも互換性がありません) [ソース: ; 行: 、列: ]"
"yyyy-MM-dd'T'HH:mm:ss.SSSZ""yyyy-MM-dd'T'HH:mm:ss.SSS'Z'""EEE, dd MMM yyyy HH:mm:ss zzz""yyyy-MM-dd"
java.io.PushbackInputStream@2e700ae1183

基本的に、解釈しようとし"09/07/2015"java.util.Dateいて、それが何を意味するのかわからないと言っているので、日付を別の形式にしてみてください。日付をフォーマットするための許容可能な方法についても、いくつかのヒントが得られます。ISO 8601フォーマットをお勧めします

2015-07-09T00:00:00.000Z

JavaScriptは、これも迅速に行うためのDateインスタンスのメソッドを提供します

new Date(2015, 7, 9).toISOString(); // "2015-08-08T23:00:00.000Z"

ただし、タイムゾーンが原因でこれが予想されるものとどのように異なるかに注意してください。これを行うときは、タイムゾーンを考慮する必要がある場合があります。

于 2015-07-09T15:41:17.373 に答える
1

日付がフォーマットされています。サーバーは日付文字列を変換しようとしていますが、日付文字列が目的の形式と一致しないため、失敗しています。

エラーに記載されている希望の形式のいずれかで日付を送信することをお勧めします。

ajax 呼び出しを行う前に日付形式を変更して、サーバーが自動的にそれを Java オブジェクトに変換できるようにします。

于 2015-07-09T15:41:41.357 に答える
0

いくつかの回答が指摘しているように、「2015 年 9 月 7 日」の日付文字列を API に送信していますが、API はそれをどう処理するかを理解できません。(驚くことではありません。API は 7 月 9 日なのか 9 月 7 日なのかを知ることができません。なぜなら、世界のさまざまな地域でその文字列でどちらの日付も表すことができるからです。)

サーバーに送信する前に、日付を明確な形式に解析する関数をクライアント側に (おそらく) 追加する必要があります。このようなもの(ここにたくさんの疑似コードがあります):

$('form').on('submit', function () {
    let formValue = $('#birthdatepicker');
    // Split formValue into month, day, year with .split('/')
    // Update the submitted form parameters with:
    Date.new(year, month, day).toISOString();
    // Or some similar function on Date
});
于 2015-07-09T16:35:23.933 に答える