防止JMS序列化器将骆驼箱转换为下层酶



我使用Symfony 4.2和这些捆绑包(FosrestBundle,JMS Serialializer Bundle(开始了API休息。我有一个Angular应用程序,该应用程序发送了许多具有像FirstName这样属性的身体的请求,但是它与我的用户属性不匹配,而其属性也是firstName。

此外,JSON响应已将所有骆驼属性更改为下划线案例。

我尝试了很多事情。没有什么可用。对不起,我的英语,希望您能理解我。

实体:

class User
{
...
    /**
     * @ORMColumn(type="string", length=255)
     */
    private $firstName;
...
}

控制器:

  /**
   * @Post(
   *    path = "/users",
   *    name = "app_user_create"
   * )
   * @View()
   * @ParamConverter("user", converter="fos_rest.request_body")
   */
  public function createUser(Request $request, User $user, ObjectManager $em, UserRepository $userRepo, DealRepository $dealRepo)
  {
    $deal = $dealRepo->find(1);
    $user->setRegisteredAt(new DateTime())
         ->setDeal($deal);
    $em->persist($user);
    $em->flush();

    $view = $this->view($user, 200)
                 ->setHeader('Access-Control-Allow-Origin', '*');
    return $view;
}

jms_serializer.yaml:

jms_serializer:
    visitors:
        xml_serialization:
            format_output: '%kernel.debug%'

fos_rest.yaml:

fos_rest:
    view:
        formats: { json: true, xml: false, rss: false }
        view_response_listener:  true
    serializer:
        serialize_null: true
    body_converter:
        enabled: true
    format_listener:
        rules:
            - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [json] }

这是我的JSON请求的身体:

{
    "username": "toto",
    "firstName": "tutu",    // CamelCase
    "name": "toti",
    "password": "blabla",
    "email": "toto@gmail.com"
}

这是响应:

{
    "id": 3,
    "username": "toto",
    "first_name": null, // UnderscoreCase and no matching
    "name": "toti",
    "password": "blabla",
    "email": "toto@gmail.com"
}

您应该更改jmsSerializer的默认属性命名策略。

在您的config.yml中。

jms_serializer:
    property_naming: 
        id: 'jms_serializer.identical_property_naming_strategy'

相关内容

  • 没有找到相关文章

最新更新