1. Model 和 DTO 转换
上文分页示例中查询出来的是用户和角色的Model,需要转换为前端需要的DTO对象。 可以通过自定义序列化器,将Model序列化并调整字段,实现Model到DTO的转换。
import {hasMany, Model, Response} from "miragejs"
import {CustomRestSerializer, pageableHandler, pageRequest} from "@zhoujianhui/ultra-miragejs"
const user = {
serializers: {
user: CustomRestSerializer.extend({
include: function (request) {
// 如果查询参数中含有 “with=roles” 则返回包含角色的用户Model
if (request.queryParams.with === "roles") {
return ["roles"]
}
return []
},
// 自定义DTO逻辑
serialize(users) {
// 调用父序列化器的序列化方法将用户集合序列化为JSON
users = CustomRestSerializer.prototype.serialize.apply(this, arguments)
users.forEach(user => {
// 不返回密码
delete user.password
// 设置是否启用
user.isEnabled = user.enabled
delete user.enabled
// 将角色列表转换为角色名列表
user.roleNames = user.roles.map(role => role.name)
delete user.roles
})
return users
}
})
}
}
export default user
此时可以看到响应为:
{
"content": [
{
"id": 1,
"username": "admin",
"phoneNumber": "18722222222",
"mail": null,
"avatar": "admin.png",
"isEnabled": true,
"roleNames": [
"超级管理员",
"普通用户"
]
},
{
"id": 2,
"username": "user",
"phoneNumber": "15911111111",
"mail": null,
"avatar": "user.png",
"isEnabled": true,
"roleNames": [
"普通用户"
]
}
],
"totalElements": 2,
"totalPages": 1,
"size": "10",
"number": "1"
}