我正在为我的项目编写rest apis来创建,检索和修改数据库的值。 该模型有一个sql.Date字段,如果我给出日期,如2018-01-35(yyyy-MM-dd),则在执行POST请求时,它会自动转换为2018-02-04。 我想避免这种情况,以便告诉我给定的日期无效。
我在SO中搜索并尝试了这种方法,
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date dob;
但这没有做任何事情,所以我尝试了另一种方法
@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
但这仅检查格式,如果我将值仅作为" 1993",它会给出错误但不会检查" 1993-01-35"。
我也试过了,
public static boolean dateChecker(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setLenient(false);
calendar.setTime(date);
try{
calendar.getTime();
}catch(Exception e)
{
System.out.println(e.getMessage());
return false;
}
return true;
}
但是当我调试它时,这种方法已经得到了" 1993-01-35" as" 1993-02-04"。
模型是,
@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private Date dob;
这是我的POST方法,
@RequestMapping(value = "/patient",method = RequestMethod.POST,consumes = "application/json")
public ResponseEntity<?> createPatient(@RequestBody Patient patient)
{
if(patient.getPatientId()!=null)
{
Patient patient1 = patientRepository.findOne(patient.getPatientId());
if(patient1!=null)
{
return new ResponseEntity("Patient for the given patient Id already exists.",HttpStatus.BAD_REQUEST);
}
}
System.out.println(patient.getDob());//Here I am getting 1993-02-04 when i give date as 1993-01-35
请帮我解决这个问题。
答案 0 :(得分:0)
尝试使用util.date包作为日期。
答案 1 :(得分:0)
如果calendar.setLenient不适合你,你可以尝试这样做。
我刚刚为测试添加了一些随机数字。
int day = 21;
Calendar gmtCal =
Calendar.getInstance(TimeZone.getTimeZone("GMT"));
gmtCal.set(Calendar.MONTH, Calendar.JANUARY);
if(day <= gmtCal.getActualMaximum(Calendar.DAY_OF_MONTH)){
gmtCal.set(1993, Calendar.JANUARY, day );
System.out.println(gmtCal.get(Calendar.YEAR));
System.out.println(gmtCal.get(Calendar.MONTH));
System.out.println(gmtCal.get(Calendar.DAY_OF_MONTH));
System.out.println(gmtCal.getTime());
}
else{
System.out.println("Out of bounds");
}
您首先要做的是设置日历的月份,然后在输入的日期进行测试。如果它通过,那么你可以设置整个日期,如果没有打印错误。
注意:使用Calendar.get时,年份和日期将正确打印出来。但是,月份将从零开始。所以在这个例子中,点打印出来: 1993年(年) 0(月) 21(天)。
此外,getTime()的sysout将打印出一些您可能不需要的额外信息。
我使用这篇文章作为参考,它可能会给你一些额外的帮助:Detect invalid date on Calendar.set()
我希望这会对你有所帮助。如果这需要tweeking,请告诉我