Я беру дату рождения в качестве входных данных, используя JSON
{"dateOfBirth":"1973-08-26"}
Это поле существует в классе Person.java
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 как null в JSON, тогда я получу результат.
Я также написал тестовый пример и запрос настройки следующим образом:
Date dob = new Date(73,7,26);
request.setDateOfBirth(dob);
Когда я передаю значения из тестового примера, как указано выше, я получаю результат из базы данных. Проблема возникает только тогда, когда я получаю параметры запроса с помощью json.
- Формат JSOn и формат, хранящийся в БД, совпадают.
- У меня есть один обходной путь: вручную преобразовать java.util.Date в String в указанном выше формате и передать его как строку. Но это довольно плохой подход, и клиенту это не понравится.