質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

2回答

10040閲覧

日付入力で形式チェックするが、入力がなければnullを登録したい

java_t

総合スコア11

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2019/05/23 08:38

はじめて質問させていただきます。
今、javaの学習の中でjava,spring,MySQLを使い、Webシステムを作っています。
DBではnullを許容しており、入力は任意としたい日付項目があるのですが、
そこを未入力のままsubmitすると以下のエラーが出てしまい、うまくいきません。

Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'closeDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value ''; nested exception is java.lang.IllegalArgumentException

該当のソースコード

任意入力にしたい項目はcloseDateです。
見づらくてすみませんがこのようなコードです。
######フォームのJSP

jsp

1<body> 2 <div class="container"> 3 <c:import url="parts/event_header.jsp" /> 4 <h1>イベント登録</h1> 5 <form:form modelAttribute="event" class="form-event"> 6 <form:errors path="title" /> 7 <br /> 8 <form:errors path="startDate" /> 9 <br /> 10 <form:errors path="closeDate" /> 11 <br /> 12 <form:errors path="place" /> 13 <form:hidden path="user.userId" value="${login.userId}" /> 14 <div class="form-group"> 15 <label id="title">タイトル(必須)</label> 16 <form:input path="title" class="form-control" id="title" /> 17 </div> 18 <div class="form-group"> 19 <label id="start">開始日時(必須)</label> 20 <form:input path="startDate" 21 class="form-control datetimepicker_start" id="start" value="${sd}" 22 autocomplete="off" /> 23 </div> 24 <div class="form-group"> 25 <label id="close">終了日時</label> 26 <form:input type="datetime" path="closeDate" 27 class="form-control datetimepicker_close" id="close" value="${cd}" 28 autocomplete="off" /> 29 </div> 30 <div class="form-group"> 31 <label id="place">場所(必須)</label> 32 <form:input path="place" class="form-control" id="place" /> 33 </div> 34 <div class="form-group"> 35 <label id="group">対象グループ(必須)</label> 36 <form:select path="group.id" items="${group}" itemLabel="name" 37 itemValue="id" class="form-control" id="group" /> 38 </div> 39 <div class="form-group"> 40 <label id="detail">詳細(任意)</label> 41 <form:textarea path="detail" class="form-control" id="detail" /> 42 </div> 43 <a href="listEvent" class="btn btn-default">戻る</a> 44 <button type="submit" class="btn btn-primary form-inline date-check" >登録</button> 45 </form:form> 46 47 </div> 48 <script src="<spring:url value="/resources/js/jquery-1.10.2.min.js"/>"></script> 49 <script 50 src="<spring:url value="/resources/datetimepicker-master/build/jquery.datetimepicker.full.min.js"/>"></script> 51 <script src="<spring:url value="/resources/js/bootstrap.min.js"/>"></script> 52 <script src="<spring:url value="/resources/js/moment.js"/>"></script> 53</body>

######コントローラ

java

1public String addEventPost(@Valid Event event, BindingResult br, Model model) throws Exception { 2 System.out.println("errors:" + br.getAllErrors().toString()); 3 if (!br.hasErrors()) {//エラーがなければDBに登録 4 eventDao.insert(event); 5 return "addEventDone"; 6 } else {//エラーがあった場合日付をフォーマットして再表示 7 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); 8 if (event.getStartDate() != null) { 9 String sd = sdf.format(event.getStartDate()); 10 model.addAttribute("sd", sd); 11 } 12 if (event.getCloseDate() != null) { 13 String cd = sdf.format(event.getCloseDate()); 14 model.addAttribute("cd", cd); 15 } 16 List<Group> group = groupDao.findAll(); 17 model.addAttribute("group", group); 18 return "addEvent"; 19 } 20 }

######ドメインクラス

java

1public class Event { 2 3 private Integer eventId; 4 @NotBlank 5 @Size(max = 255) 6 private String title; 7 @NotNull 8 private Date startDate; 9 private Date closeDate; 10 @NotBlank 11 @Size(max = 255) 12 private String place; 13 private Group group; 14 private String detail; 15 private User user; 16 private Date created;//アクセッサは省略 17

理想としては未入力のものは無視して入力チェックのみ行いたいのですが、
入力フォームが存在する時点でcloseDate==""(空文字)判定となりStringとDateの間でtypeMismatchが発生してしまっているような気がします。
試しにcloseDateのフォームを消去すると問題なくnullで登録ができました。
何かうまいやり方など教えていただけると幸いです。

拙い文章で申し訳ありませんが宜しくお願いします。

補足情報(FW/ツールのバージョンなど)

java8
spring3.9.4
MySQL server5.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

いろいろ悩んだ結果、jsでバリデーションしてif文でエラーを個別に除外していくことにしました。

投稿2019/05/24 05:10

java_t

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

下記のようにするといかがでしょうか。

java

1 if (event.getCloseDate() != null && !event.getCloseDate().isEmpty()) { 2 String cd = sdf.format(event.getCloseDate()); 3 model.addAttribute("cd", cd); 4 }

投稿2019/05/23 10:53

iwamot

総合スコア1154

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

java_t

2019/05/24 00:11

ありがとうございます! ただ、コントローラーに戻ってきた時点でエラーは拾ってしまっているのでエラーの方をなんとかしたいんですよね(><)
iwamot

2019/05/24 03:39

ああ、理解できていませんでした。失礼しました。
java_t

2019/05/24 05:07

結果iwamot様の論理演算子を使うのがヒントで解決できました! ありがとうございます!
iwamot

2019/05/24 10:28

よかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問