Я принимаю дату рождения в качестве ввода, используя JSON
{"dateOfBirth":"1973-08-26"}
Это поле существует в Person.java
class
import java.util.Date;
public class Person {
Date dateOfBirth;
//Some other fields
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
}
Это сопоставлено с таблицей персонажа в базе данных mysql.Я запрашиваю базу данных как:
entityId = (Long) session.selectOne("ValidatePerson", registerUserRequestParams);
Ниже приведены записи, которые я делаю в своем mapper.xml
<select id="ValidatePerson" parameterMap="ValidatePersonMap" resultType="long">
select person.entityId
from person
where
//Some other Validation checks
<if test="dateOfBirth != null">
and person.dateOfBirth = #{dateOfBirth}
</if>
);
</select>
У меня есть карта параметров как
<parameterMap id="ValidatePersonMap" type="java.util.HashMap">
<parameter property="dateOfBirth" javaType="java.util.Date" jdbcType="DATE" mode="IN"/>
</parameterMap>
Я не могу получить какой-либо результат из базы данных. Он не выбирает ни одной строки, даже если значение существует. Я проверил, что ни одна из других проверок не проходит.Если я передаю dateOfBirth как ноль в JSON, тогда я получаю результат.
Я также написал тестовый пример и запрос на установку следующим образом:
Date dob = new Date(73,7,26);
request.setDateOfBirth(dob);
Когда я передаю значения из тестового примера каквышеупомянутый я получаю результат из базы данных.Проблема возникает только тогда, когда я получаю параметры запроса, используя json.
- Формат JSOn и формат, сохраненный в БД, одинаковы
- Один из способов обойти это - вручную преобразоватьjava.util.Date to String в вышеприведенном формате и передать его в виде строки.Но это довольно плохой подход, и клиенту это не понравится.