使用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文档中没有提及它。
答案 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);
}
这使得在数据库中添加时任何未知字段都将被忽略