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"
}
Copyright ©zhoujianhui all right reserved,powered by Gitbook更新时间: 2024-11-01 15:41:59

results matching ""

    No results matching ""