环境:IDEA,mysql,springboot,layui
问题:多条件查询有两个条件,要求可以不输入,但运行时第一个可以留空,但第二个不能为空。查询模块是一个项目里别的模块复制过来再改的,有关的部分都已复制已改过,但结果就不一样。原模块可以实现各查询条件为空,但复制过来的不能实现。如下:
fieldset>
<blockquote class="layui-elem-quote">
<form class="layui-form" method="post" id="searchFrm">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">患者姓名:label>
<div class="layui-input-inline">
<input type="text" name="reportName" autocomplete="off" class="layui-input">
div>
div>
<div class="layui-inline">
<label class="layui-form-label">患者ID:label>
<div class="layui-input-inline">
<input type="text" name="reportId" autocomplete="off" class="layui-input">
div>
div>
<div class="layui-inline">
<button type="button" class="layui-btn layui-btn-normal layui-icon layui-icon-search" id="doSearch">查询button>
<button type="reset" class="layui-btn layui-btn-warm layui-icon layui-icon-refresh">重置button>
div>
div>
form>
blockquote>
需要实现多条件查询,各条件都可以为空,全空查询所有数据,谢谢!
不改数据类型的话,前端就加个判断,这个值为空的时候,不传到后台就行,但是后台的int类型还是会默认为0,所以改类型是最好的解决办法
这玩意儿贴前端代码没有任何意义,空不空是后端的事;
用int肯定是不行的,要支持可以为空可以换成Integer
原因已找到,因为我第二个条件是int格式。
求解决方法?
Field error in object 'reportVo' on field 'reportId': rejected value []; codes [typeMismatch.reportVo.reportId,typeMismatch.reportId,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [reportVo.reportId,reportId]; arguments []; default message [reportId]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'reportId'; nested exception is java.lang.NumberFormatException: For input string: ""]]
"参数定义时,定义数值,应使用Integer,如果用int定义,当入参为NULL时,程序会报空指针错误。原因是JAVA 中 int 是值类型,非对象,不可以设置为 NULL,integer 是对象类型,可以设置为NULL"
改成integer已解决,谢谢各位!
提供下后台代码
后台查询时应该判断不为null时过滤,为null时则不过滤
[Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'reportId'; nested exception is java.lang.NumberFormatException: For input string:]这个错误意思是前端传递的时候reportId是string,但是后端设置的类型是int.string和int类型转换失败。可以用这个在调用mapper之前转换一下