当前位置: 首页 > 知识库问答 >
问题:

在REST API中将日期传递给控制器-无法将PathVariablejava.sql.Date转换为java.sql.Date

曾沛
2023-03-14

我有 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';嵌套异常org.springframework.core.convert.ConversionFailedException:无法从类型[java.lang.String]转换为类型[@org.springframework.web.bind.annotation.PathVariable@org.springframework.format.annotation.DateTimeFormatjava.sql.Date]的值'2014-10-20';嵌套异常org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[java.util.Date]转换为类型[@org.springframework.web.bind.annotation.PathVariable@org.springframework.format.annotation.DateTimeFormatjava.sql.Date]的转换器"

共有2个答案

薄龙光
2023-03-14

上面的@DateTimeFormat(pattern=“yyyy-MM-dd”)对我不起作用的原因是我使用的Date参数类型是java.sql。日期而不是java.utils.Date。

一旦我将其更改为正确的包,@DateTimeFormat就开始正常工作。

穆毅然
2023-03-14

有两个选项可以解决此问题。

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)
 类似资料:
  • 问题内容: 有人可以建议我如何将日期从这种格式转换为 控制器中的日期 吗? 仅供参考,我的日期将以这种方式存储,并且完全不填充绑定到带有字段的编辑表单时。 #Plunker演示在这里。 编辑Ctrl Edit.html-模板 问题答案: http://docs.angularjs.org/api/ng.filter:date 但是,如果您使用的是HTML5 type =“ date”,则必须使用I

  • 因此,在我的Javascript中,我使用的是表单序列化,输出是正确的 (issubmit=1) 当我试图将其传递给我的控制器时,我什么也得不到,。我做错了什么? Jquery: 控制器:

  • 周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢

  • 我试图找出是否有可能传递一个JSON对象RestAPI,或传递多个参数到该API?如何在Spring中读取这些参数?让我们假设url看起来像下面的例子: 例1<代码>http://localhost:8080/api/v1/mno/objectKey?id=1 传递下面url中的JSON对象是否有效? 例2<代码>http://localhost:8080/api/v1/mno/objectKey

  • 问题内容: 是否有一个内置的转换方法为在Python,例如获得在指定日期的午夜?相反的转换很容易:有一个方法。 我真的必须手动打电话吗? 问题答案: 您可以使用;现在,您创建一个初始化为午夜的对象。