db2 Springboot / JPA-在REST API中将日期传递给控制器-无法将PathVariable java.sql.Date转换为java.sql.Date

ny6fqffe  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(146)

我有一个DB2表,其中SOLD_DATE字段是TIMESTAMP类型(例如,2017-12-07 08:43:23)。
我希望能够发送URL提供开始和结束日期URL参数像下面我的控制器:

http://localhost:8080/irwapi/v1/logs/2014-10-20/2021-10-20

我的控制器看起来像:

@GetMapping(path = "/{startDate}/{endDate}")
public List<CarResponse> getCarsSoldBetween(
    @PathVariable("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, 
    @PathVariable("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
  List<CarResponse> cars = myRepository.getCarsSoldBetween(startDate, endDate);
  return cars;
}

myRepository具有如下定义的@Query方法:

@Query("select c from CarEntity c where c.carType = 'SPORT' and C.soldDate between  ?1 and ?2") 
List<CarEntity> getCarsSoldBetween(Date startDate, Date endDate);

当我执行上面的方法时,上面的@Query方法抛出错误:

“无法将类型'java.lang.String'的值转换为所需类型'java.sql. Date';嵌套的异常是一个嵌套的异常。无法将值'2014-10- 20'从类型[java.lang.String]转换为类型[@org.springframework.web.bind.annotation.PathVariable @org.springframework.format.annotation.DateTimeFormat java.sql.Date];嵌套的异常是一个异常。找不到能够从类型[java.util.Date]转换为类型[@org.springframework.web.bind.annotation.PathVariable @org.springframework.format.annotation.DateTimeFormat java.sql.Date]的转换器"

of1yzvn4

of1yzvn41#

有两个选项可解决此问题。
1.在控制器级别上,适用于控制器内的所有请求。

@InitBinder     
public void initBinder(WebDataBinder binder){       binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true, 10));    
}

外地一级的备选办法2。

@DateTimeFormat(pattern = "yyyy-MM-dd")
@Temporal(TemporalType.DATE)
kyxcudwk

kyxcudwk2#

上面的@DateTimeFormat(pattern = "yyyy-MM-dd")对我不起作用的原因是我使用的Date参数类型是java.sql.Date而不是java.utils.Date
一旦我把它改成正确的包,@DateTimeFormat就开始正常工作了。

相关问题