环回4:非原始属性而非关系

时间:2018-10-23 00:19:40

标签: loopbackjs

使用Loopback 4,我想在我的应用程序代码中使用Typescript的类型安全性,同时从存储库装饰器中获取模式验证,但将属性存储为序列化json(在这种情况下为Postgres bson),而不是具有FK关系的独立实体。

考虑一个可能包含电话号码列表的地址簿Contact模型:

@model()
export class PhoneNumber {

  @property({ required: true })
  number: string;

  @property()
  type: string; 

}

@model()
export class Contact extends Entity {

  @property({ id: true, required: true })
  id: string;

  @property({ required: true })
  email: string;

  @property({ required: true })
  name: string;

  @property.array(PhoneNumber)
  phoneNumbers: PhoneNumber[];

  constructor(data?: Partial<Contact>) {
    super(data);
  }
}

在上面的示例中,我获得了完整的架构验证,但是如果我尝试使用扩展了Contact的生成的Repository保存DefaultCrudRespository的实例,它将删除提供的任何内容在phoneNumbers字段中,并在数据库中保存一个空列。

如果我将属性注释更改为:

  @property.array(Object)
  phoneNumbers: PhoneNumber[];

它将正确保存字段,序列化为json,但不会尝试验证该字段,也不会在生成的openapi.json规范中将类型指定为数组PhoneNumber

Loopback 3似乎支持嵌入式模型:https://loopback.io/doc/en/lb3/Embedded-models-and-relations.html

不过,在Loopback 4文档中没有提及它。

1 个答案:

答案 0 :(得分:0)

尝试在模型PhoneNumber中使用严格模式过滤器

@ExceptionHandler(OcspException.class)
    public ResponseEntity<Object> exception(OcspException exception,HttpServletRequest request) {



        ResponseException response = new ResponseException();
        response.setCode("404");
        response.setDetails(exception.getM() );
        return new ResponseEntity<>(response, HttpStatus.NOT_FOUND);

    }

这使得在数据库中添加时任何未知字段都将被忽略