Мой вопрос был бы слишком запутанным, чтобы понять, поскольку я столкнулся с очень странной проблемой. Я постараюсь изо всех сил, чтобы объяснить это.
У нас есть 2 приложения
Приложение 1: Spring boot application, котороеимеет api отдыха.
Приложение 2: веб-приложение, которое использует api отдыха из приложения 1 для отображения информации.
В моем загрузочном приложении Spring я использую репозиторий mongo для запроса документов на основе датыв поле, это прекрасно работает, когда я проверяю его у почтальона или чванца, прежде чем он будет использован веб-приложением в браузере.
В тот момент, когда веб-приложение потребляет остальные API, оно начинает давать неверные результаты даты.
Кроме того, когда остальные API-интерфейсы используются веб-приложением, независимо от того, сколько раз вы вызываете остальные API-интерфейсы в Postman или Swagger, это дает неверные результаты.
Только после перезапуска сервера и вызова остальных API-интерфейсов.от почтальона или чванства это тогда дает правильные результаты.
Мой недетПонятно, что когда веб-приложение использует остальные API, даты в документах анализируются в UTC.С другой стороны, это не происходит от почтальона или чванца, когда вообще нет вызова из веб-приложения.
Вот мой фрагмент кода в весеннем загрузочном приложении 1 для извлечения документов с использованием репозитория mongodb.
@Service
class EmployeeImpl{
@Autowired
XYZRepository xyzRepository;
public List<Employees> getEmployeeDetails(int EmployeeId) {
Date tempendDate = new Date();
String timeZone = "Asia/Kolkata";//IST timezone
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone(timeZone));
Date endDate = getDatefromStringDate(sdf.format(tempendDate),"yyyy-MM-dd'T'HH:mm:ss'Z'");
Date startDate = addHours(endDateTemp,-24);
List<Employees> employeeList = new ArrayList<>();
Pageable page = PageRequest.of(0, 24, Direction.DESC,"timeStamp");
Page<Employees> employeeDetails = xyzRepository.findByEmployeeIdAndTimeStamp(EmployeeId, startDate,endDate,page);
employeeList.addAll(employeeDetails.getContent());
return employeeList;
}
public Date getDatefromStringDate(String date, String format){
try{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.parse(date);
}catch (Exception e) {
return null;
}
}
public Date addHours(Date date, int hours){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR, hours);
return cal.getTime();
}
}
@Repository
public interface XYZRepository extends CrudRepository<Employees, String> {
@Query("{'EmployeeId':?0,timeStamp: { $gte:?1, $lt:?2}}")
Page<Employees> findByEmployeeIdAndTimeStamp(int EmpId, Date localstartDate,Date localendDate,Pageable pageable);
}
То, что я ищу, - это то, как я могу получить тот же ответ, когда rest api вызывается пользовательским интерфейсом, и тот же ответ, когда вызывается почтальоном или чванством.