首页 > 解决方案 > Symfony - 如何使用默认值反序列化?

问题描述

我开始学习 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);
    }
}

我发布了一个使用以下 JSON 数据创建客户的请求:

{"name":"Customer Lambda"}

但我有以下错误

NotNullConstraintViolationException

使用参数 [Resource id #99, "Customer Lambda", null] 执行 'INSERT INTO customers (id, name, comment) VALUES (?, ?, ?, ?)' 时发生异常:

SQLSTATE [23000]:违反完整性约束:1048 列“注释”不能为空

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

标签: symfonyjms-serializer

解决方案


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

推荐阅读