【问题标题】:How convert string to int with Symfony Serializer如何使用 Symfony 序列化器将字符串转换为 int
【发布时间】:2020-05-24 21:21:39
【问题描述】:

我正在尝试将数组非规范化为一个对象,但是当非规范化方法遇到一个数字的代码字段时,它会出错,因为它是数组中的一个字符串,也许修复它很时髦

{
  "name": "Exception",
  "message": "The type of the \"code\" attribute for class \"App\\Http\\Response\\Flight\\DriverResponse\" must be one of \"int\" (\"string\" given).",
  "code": 0,
  "type": "Symfony\\Component\\Serializer\\Exception\\NotNormalizableValueException",
  "file": "/app/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php",
  "line": 445,
  "stack-trace": [
    "#0 /app/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php(331): Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer->validateAndDenormalize('App\\\\Http\\\\Respon...', 'code', '1', 'array', Array)",
    "#1 /app/vendor/symfony/serializer/Serializer.php(185): Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer->denormalize(Array, 'App\\\\Http\\\\Respon...', 'array', Array)",
    "#2 /app/src/Http/Response/Transformer.php(96): Symfony\\Component\\Serializer\\Serializer->denormalize(Array, 'App\\\\Http\\\\Respon...', 'array')",
    "#3 [internal function]: App\\Http\\Response\\Transformer->App\\Http\\Response\\{closure}(Array)",
    "#4 /app/src/Http/Response/Transformer.php(98): array_map(Object(Closure), Array)",
    "#5 /app/src/Http/Controllers/Api/Flight/DriverController.php(124): App\\Http\\Response\\Transformer->transform(Object(yii\\data\\SqlDataProvider), 'drivers', 'App\\\\Http\\\\Respon...')",
    "#6 [internal function]: App\\Http\\Controllers\\Api\\Flight\\DriverController->actionIndex()",
    "#7 /app/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)",
    "#8 /app/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)",
    "#9 /app/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('index', Array)",
    "#10 /app/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('Api/Flight/driv...', Array)",
    "#11 /app/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
    "#12 /app/web/index.php(14): yii\\base\\Application->run()",
    "#13 {main}"
  ]
}

【问题讨论】:

    标签: symfony serialization denormalized


    【解决方案1】:

    我修好了,只需要通过这个设置[AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT => true]

    $this->serializer->denormalize(
        $array,
        $class,
       'array',
       [AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT => true]
    );
    

    【讨论】:

    • 也许您应该在将类型设置到属性时强制使用该类型。如果您期望和 int,则它应该始终是 int,否则(在与序列化不严格相关的某些其他上下文中)您可能会遇到麻烦。
    • 此时,我映射了数据库中的数据,该数据库是 DTO 上的字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    相关资源
    最近更新 更多