Запрет JMS Serializer для преобразования CamelCase в UnderscoreCase - PullRequest
0 голосов
/ 08 мая 2019

Я запустил API Rest с Symfony 4.2 и этим пакетом (FOSRestBundle, JMS Serializer Bundle).У меня есть приложение Angular, которое отправляет много запросов с телом, у которого есть свойство, подобное firstName, но оно не совпадает с моим свойством User, в то время как его свойство имеет имя firstName.

Кроме того, в ответе json все свойства camelCase были изменены.чтобы подчеркнуть Кейс.

Я пробовал так много вещей.Ничего не работаетИзвините за мой английский, надеюсь, вы меня поймете.

Сущность:

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"
}

1 Ответ

0 голосов
/ 14 мая 2019

Вам следует изменить стратегию именования свойств по умолчанию для JmsSerializer.

В вашем config.yml.

jms_serializer:
    property_naming: 
        id: 'jms_serializer.identical_property_naming_strategy'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...