はじめて質問させていただきます。
今、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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。