Сделайте так, чтобы JMS Serializer не заполнял нулевые значения вместо значений по умолчанию - PullRequest
0 голосов
/ 27 ноября 2018

JMS Serializer 1. * при десериализации заполняет только те поля, которые предоставлены во входных данных.Например, у нас есть код, подобный следующему:

$criteria = $this->serializer->deserialize($request->getContent(), SearchCriteria::class, 'json');

И когда в запросе отсутствует поле limit, оно принимает значение по умолчанию, определенное в свойстве класса, т.е.

class SearchCriteria {
    // ...
    private $limit = 10;
    // ...
}

Thisповедение изменилось после перехода на JMS Serializer 2.0 - теперь он заменяет поле limit на ноль, что нарушает нашу логику.Есть ли способ настроить старое поведение?Мы используем Symfony 4 с jms/serializer-bundle@3.0.0.

Здесь jms_serializer.yaml:

jms_serializer:
    default_context:
        serialization:
            serialize_null: false
        deserialization:
            serialize_null: false

1 Ответ

0 голосов
/ 29 ноября 2018

Таким образом, лучший обходной путь, который я нашел до сих пор, - это использование аннотации PostDeserialize (https://jmsyst.com/libs/serializer/master/reference/annotations#postdeserialize) и ручная установка значений по умолчанию, например:

/**
 * @JMS\PostDeserialize()
 */
public function postDeserialize()
{
    $this->limit = $this->limit ?? 10;
}

Это выглядит некрасиво, но работает.

...