2

我用 symfony 4.2 和这些包(FOSRestBundle,JMS Serializer Bundle)启动了一个 API Rest。我有一个 Angular 应用程序,它发送许多请求,其主体具有像 firstName 这样的属性,但它与我的 User 属性不匹配,而它的属性名称也是 firstName。

此外,json 响应已将所有 camelCase 属性更改为下划线 Case。

我已经尝试了很多东西。没有任何效果。对不起我的英语,我希望你能理解我。

实体 :

class User
{
...

    /**
     * @ORM\Column(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"
}
4

1 回答 1

3

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

在你的config.yml.

jms_serializer:
    property_naming: 
        id: 'jms_serializer.identical_property_naming_strategy'
于 2019-05-14T12:59:00.270 回答