为什么我不能输入空值?

时间:2019-08-01 05:37:49

标签: java spring spring-boot spring-mvc

我一直在使用Java Spring进行一个小项目。我已经在Navicat中将表结构设置为能够“空”值。我还将模型设置为可以为空值。

但是,我仍然无法在该列中输入空值并收到此错误消息。

仅供参考:我正在使用Spring Tool Suite 3.9.7 IDE

Field error in object 'sertifikasihapus' on field 'modified_on': rejected value []; 
codes [typeMismatch.sertifikasihapus.modified_on,typeMismatch.modified_on,typeMismatch.java.sql.Timestamp,typeMismatch]; 
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sertifikasihapus.modified_on,modified_on]; 
arguments []; 
default message [modified_on]]; 
default message [Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Timestamp' for property 'modified_on'; 
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.Column java.sql.Timestamp] for value ''; 
nested exception is java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]]]

<script>
		$('#idBtnHapusHapus').click(function() {
			var vDataRole = $('#idFrmHapusSertifikasi').serialize();
			var angka = $('#Id').val();
			var nama = $('#idNamaSertifikasi').val();
			if ($("#idModifiedOn").val().length < 1) {
				$('#idModifiedOn').val(null);
				debugger;
				$.ajax({
					url : './hapussertifikasi/' + angka,
					type : 'Put',
					data : vDataRole,
					dataType : "json",
					success : function(model) {
						debugger;
						window.location = './sertifikasi'

					},
					error : function(model) {
						debugger;
					}
				});
			} else {
				debugger;
				$.ajax({
					url : './hapussertifikasi/' + angka,
					type : 'Put',
					data : vDataRole,
					dataType : "json",
					success : function(model) {
						debugger;
						window.location = './sertifikasi'

					},
					error : function(model) {
						debugger;
					}
				});
			}
		});
	</script>
<div class="col-xs-12">
		<div class="row">
			<form id="idFrmHapusSertifikasi" method="post">
				<input type="hidden" class="form-control" id="Id" name="id"
					placeholder=""> 
				<input type="hidden" class="form-control"
					id="idNamaSertifikasi" name="certificate_name" placeholder="">
				<input type="hidden" class="form-control" id="idBulanBerlaku"
					name="valid_start_month" placeholder=""> 
				<input
					type="hidden" class="form-control" id="idTahunBerlaku"
					name="valid_start_year" placeholder=""> 
				<input
					type="hidden" class="form-control" id="idPenerbit" name="publisher"
					placeholder=""> 
				<input type="hidden" class="form-control"
					id="idBulanBerlakuS" name="until_month" placeholder=""> 
				<input
					type="hidden" class="form-control" id="idTahunBerlakuS"
					name="until_year" placeholder=""> 
				<input type="hidden"
					class="form-control" id="idCatatan" name="notes" placeholder="">
				<input type="hidden" class="form-control" id="idCreateOn"
					name="createOn" placeholder="">
				 <input type="hidden"
					class="form-control" id="idCreateBy" name="createBy" placeholder="">
				<input type="hidden" class="form-control" id="idModifiedOn"
					name="modified_on" placeholder=""> 
				<input type="hidden"
					class="form-control" id="idModifiedBy" name="modified_by"
					placeholder="">
			</form>
			<div class="col-xs-2">
				<i class="glyphicon glyphicon-trash center" style="font-size: 50px"></i>
			</div>
			<div class="col-xs-8">
				<div class="clTulisanHapus center" id="idTulisanHapus">
					<p>Anda Yakin ingin menghapus Sertifikasi</p>
					<!-- I WANTED THE CERTIFICATE NAME TO BE HERE -->
					<div th:each="item:${oneprofil}">
						<b><p th:text="${item.certificate_name}+' ?'"></p></b>
					</div>
				</div>
			</div>
		</div>
	</div>
	<div class="col-md-offset-8">
		<div class="btn-group">
			<input type="hidden" id="idDataId"> <input type="hidden"
				id="idDataNama">
			<button type="button" id="idBtnHapusBatal" data-dismiss="modal"
				class="btn clBtnMdlHapus">Tidak</button>
			<button type="button" id="idBtnHapusHapus" data-id="${item.id}"
				class="btn clBtnMdlHapus">Ya</button>
		</div>
	</div>

2 个答案:

答案 0 :(得分:0)

看起来您的值不是null,而是空的String(“”)。您可以使用关键字而不使用任何“引号”。

有关更多信息,请参见此question:

  

在实践中,您可以简单地假装它是“仅仅是可以用于任何引用类型的特殊文字”。

答案 1 :(得分:0)

  

[无法将类型'java.lang.String'的属性值转换为   属性“ modified_on”的必需类型“ java.sql.Timestamp”;

您将以空字符串而不是null的形式接收该值,这会导致类型不匹配并导致问题。

从HTML中,我看到您正在将其作为隐藏参数发送。还有另一种方法可以在Spring Boot中自动设置创建日期和修改日期。

在实体下面使用

    @PrePersist
    protected void prePersist() {
        createdAt = set value here
    }

    @PreUpdate
    protected void preUpdate() {
        modifiedOn = set valye here
    }

休眠

Spring Data JPA