:私はつもりだクライアントからJPA @Past私は、単純なDTOオブジェクトを持って春ブートベースのプロジェクトで日付/カレンダー検証
public class ExpenseController {
private final ExpenseService expenseService;
@Autowired
public ExpenseController(ExpenseService expenseService) {
this.expenseService = expenseService;
}
@RequestMapping(value = ADD_EXPENSE, method = POST)
public ResponseEntity addExpense(@Valid @RequestBody ExpenseDTO expenseDTO, Principal principal) {
expenseService.addExpense(expenseDTO, principal.getName());
return ResponseEntity.ok().build();
}
}
:
public class ExpenseDTO {
@Min(value = 1, message = "expense.amount.negative")
private int amount;
@Past
private Calendar createdAt;
// setters/getters/constructor are omitted
}
や、残りのコントローラ現在の日付:{"createdAt": "2017-01-27T21:32:19.183Z"}を送信しますが、バックエンドの検証中に日付は "2017-01-28T01:30:00.000 + 0200"というように解析されます結果は間違っており、検証は失敗します。私は@JsonFormatで遊んでいましたが、結果はありませんでした。
注:H2データベースを使用していますが、DTOオブジェクトから@Pastを削除するとすべて正常に機能しますが、将来の日付を無効にする必要があります。
タイムゾーンなしで日付を検証するにはどうすればいいですか?クライアントから送信されたものと同じ日付をバックエンドで正確に必要としますか?
クライアントが '2017-01-27T21:32:19.183Z'を送信している場合、それはどのようにして' 2017-01-28T01:30:00.000 + 0200'に変換されましたか?それは同じ時代に近いことさえありません。 「2017-01-27T23:32:19.183 + 0200」は同じ時刻になります。 – Andreas
@Andreas私はそれが私のJVMのタイムゾーンがGMT + 2であると思う。 – TimurJD