I am new to sorting or filtering data in Spring Boot and want to fetch all order records between two dates when selected from UI. I have created REST API to search data between two dates, but even when I am providing wrong dates, I am getting data.
To display table, I have implemented it through Pagination. So when I select two dates in which data is present and click on button, then it will display fetched data in a table. But this is not working as expected and I do not know where I am doing wrong.
For example: I have selected fromdate from UI as: 01-06-2021 and todate from UI as: 04-06-2021 and clicked on fetch record button, then records should be displayed according to date range. Suppose If I select fromdate: 14-06-2021 and todate as: 23-06-2021 (there is no records present between these two date ranges) still I am getting result from database.
Below is my Orders repository method to get data between date ranges.
List<Orders> findByOrderdateGreaterThanEqualAndOrderdateLessThanEqualAndOrderstatusOrderByCreateddatetimeDesc(Date fromdate, Date todate, String orderstatus);
Below is my controller where I have created API to fetch records between two dates:
@RequestMapping(value = AkApiUrl.fetchorderbydate, method = { RequestMethod.POST, RequestMethod.GET }, produces = {MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<?> fetchorderbydate(HttpServletRequest request, @RequestParam("startdate") String startdate, @RequestParam("enddate") String enddate) {
logger.info("Fetch order between start date: "+startdate+" and end date: "+enddate+" function is calling.. ");
CustomResponse = ResponseFactory.getResponse(request);
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date orderdatefrom = sdf.parse(startdate);
System.out.println("Order placed from date: "+orderdatefrom.toString());
Date orderdateto = sdf.parse(enddate);
System.out.println("Order placed to date: "+orderdateto.toString());
List<Orders> orderbydate = ordersdao.findByOrderdateGreaterThanEqualAndOrderdateLessThanEqualAndOrderstatusOrderByCreateddatetimeDesc(orderdatefrom, orderdateto,"refunded");
System.out.println(orderdatefrom+" comes before"+orderdateto);
System.out.println("Order data between two dates are : "+orderbydate.size());
if (orderbydate != null) {
CustomResponse.setResponse(orderbydate);
CustomResponse.setStatus(CustomStatus.OK);
CustomResponse.setStatusCode(CustomStatus.OK_CODE);
}
} catch (Exception e) {
e.printStackTrace();
CustomResponse.setResponse(null);
CustomResponse.setStatus(CustomStatus.Error);
CustomResponse.setStatusCode(CustomStatus.Error_CODE);
}
return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
}
This is the script to handle fetch record between two dates and on ajax success another function is called to display table.
function getorderdata() {
debugger
var startdate = document.getElementById('orderstartdate').value;
var enddate = document.getElementById('orderenddate').value;
if ((Date.parse(enddate) >= Date.parse(startdate))) {
var url = "../api/fetchorderbydate";
$.post(url,{
startdate : startdate,
enddate : enddate,
}, function(data, status) {
if (data.status == "OK") {
if (data.statusCode == 1) {
console.log(data.response);
ajaxordertable(<%=pagelength%>);
} else {
var error = data.responseMessage;
swal(error, "", "error");
}
} else {
var error = data.responseMessage;
swal(error, "", "error");
}
});
} else {
alert("End date should be greater than start date");
}
}