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

在 Angular 9 中,如何在 http 客户端响应模型中强制属性日期类型?

长孙雅志
2023-03-14

我正在进行Angular 9项目,我收到的一个响应包含< code>Date类型的属性,但是当我发送请求时:

// MyModel
class MyModel {
   prop: string;
   myDate: Date;
}

// request sent like
this.http.get<MyModel>(url);

响应正确,但属性被填充为字符串ISO格式(例如:2020-11-24T19:48:20.3637502)(因为在JSON中没有 MyModel的实例或将值赋给 myDateproperty时,始终是

除了在收到响应后进行映射之外,还有其他方法可以做到这一点吗?

我试了一下,但没有成功:

class MyModel {
   prop: string;
   private _myDate: Date;
   public get myDate() {
      return this._myDate;
   };
   public set myDate(val) {
      this._myDate = new Date(val);
   };
}

共有1个答案

皇甫展
2023-03-14

最简单的方法是映射返回的数据并手动进行修改。

this.httpClient.get<DataModel>("/api/getData")
  .pipe(
    map((data)=>{
      data.date1 = new Date(data.date1);
      data.date2 = new Date(data.date2);
      data.date3 = new Date(data.date3);
      return data;
    })
  );

请注意,我有点作弊——Date构造函数可以将字符串和Date都作为参数。通常,映射步骤的结果可以具有与接收到的响应不同的类型。

或者,您可以使用Http拦截器。

请参阅 Angular 应用程序中的日期处理(第 2 部分 - Angular http 客户端和 ngx 日期选择器)

此外,正如您所注意到的,您为 http get 指定的类型不会以任何方式强制执行。您会收到 json 反序列化的结果。

请注意,如果您使用< code >类,而不是< code >类型作为您的数据模型,这就特别棘手。即使您收到的字段是您所期望的,原型链也没有建立,所以对收到的对象的任何方法调用都会导致运行时错误。

这也解释了为什么您尝试使用getset失败-您在不是MyModel类实例中收到的对象。

我的建议是

  • 将响应数据建模为类型(或interface
  • 如果需要,通过Observable转换数据。管道
  • 如果您需要一个类作为数据模型,请在上一步中将响应映射到一个类
 类似资料:
  • 我不知道这里有什么问题。我想发出一个响应二进制数据(例如文件下载)而不是JSON的HTTP请求。 这些行是可以的-但需要JSON。 但我需要将响应定义为不是 JSON。 在这里,我遇到了一个问题。我也尝试了“斑点”。我总是在编译时收到一个类型脚本错误。 类型'{resseType:"string";}'的参数不能分配给类型'{Headers?: HttpHeaders|{[head: string

  • 我正在发送一个请求到一个服务器,它给了我一个200,没有身体(完全可以接受),但是我无法解决如何配置micronaut注释来处理这个问题。无论我尝试什么,它都试图将空响应解码为JSON(至少我认为这是它正在做的,因为它给出了一个意想不到的错误,而不是当身体出错时得到的正常杰克逊错误)。我在微型文档中找不到任何关于如何做到这一点的东西。

  • 当我调用服务时,它会给出以下错误:- 我已经基于相同的设计模式构建了REST API,它对我来说工作得很好。我没有得到的东西,为什么它说“没有财产日期找到类型现金流!”?实体中没有日期属性。我尝试删除数据库并重新启动,但没有成功。我错过了什么?

  • 问题内容: 在模型类中使用JavaFX bean属性是否正确? 我想知道在模型类中使用属​​性是否能够将它们与视图组件轻松绑定是否是一种好习惯。我不担心将来这些库的可用性,因为我的程序将在JRE8或更高版本上运行,但是在模型类中使用JavaFX库的性质使我持怀疑态度,并且我担心当前和将来的不兼容性,尤其是因为我想使用Hibernate来保留这些属性。 注意:我使用纯JavaFX环境,并且我的应用程

  • 问题内容: 如何在Python中将类成员变量限制为特定类型? 较长版本: 我有一个具有多个成员变量的类,这些成员变量在该类的外部设置。由于它们的使用方式,它们必须为特定类型,即int或list。 如果这是C ++,则只需将它们设为私有,然后在“ set”函数中进行类型检查。鉴于这是不可能的,是否有任何方法可以限制变量的类型,以便在为其分配了错误类型的值时在运行时发生错误/异常?还是我需要在使用它们

  • 我正在使用Mockito在Flutter应用程序中对http请求应用单元测试。 要测试的代码: 我得到了以下错误:“Null”类型不是类型转换中“Future”类型的子类型 已经使用构建运行器成功生成了模拟 我还尝试更新模拟类并将返回值更改为 我得到:键入“未来”