Symfony - 如何使用默认值反序列化?

Symfony - How to deserialize with default values?

我开始学习 Symfony 4。

我想从 json 数据中反序列化数据。 (我正在使用 JMSSerializer)

这是我的背景: 我在 src/App/Entity

中有一个客户实体
class Customer {
    /**
     * 
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\Column(type="string", length=250)
     * @Assert\NotBlank()     
     */
    private $name;
     /**
     * @ORM\Column(type="string", length=250)
     * @Assert\NotNull
     */
    private $comment;

    public function __construct() {
    $this->comment = "";
    }
}

我在 src/App/Controller

中有一个 CustomerController 控制器
class CustomerController extends Controller
{
    /**
     * @Route("/customers", name="customer_create")
     * @Method({"POST"})
     */
    public function createAction(Request $request)
    {
        $data = $request->getContent();
        //Il faudrait valider les données avant de les mettre en base de données
        $customer = $this->get('jms_serializer')->deserialize($data, 'App\Entity\Customer', 'json');        

        $em = $this->getDoctrine()->getManager();
        $em->persist($customer);
        $em->flush();

        return new Response('', Response::HTTP_CREATED);
    }
}

我 post 使用以下 JSON 数据创建客户的请求:

{"name":"Customer Lambda"}

但是我有以下错误

NotNullConstraintViolationException

An exception occurred while executing 'INSERT INTO customers (id, name, comment) VALUES (?, ?, ?, ?)' with params [Resource id #99, "Customer Lambda", null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comment' cannot be null

是否可以在反序列化后为评论字段设置一个默认值(空字符串)?我以为在 Customer 构造函数中设置它会解决问题,但事实并非如此。

1º 如果您已将评论定义为不可为空,为什么要尝试设置空字符串。

这个:

 /**
 * @ORM\Column(type="string", length=250)
 * @Assert\NotNull
 */
private $comment = "";

public function __construct() {
}

改为:

 /**
 * @ORM\Column(type="string", length=250)
 * @Assert\NotNull
 */
private $comment;

public function __construct() {
$this->comment = "";
}