SF3 - 使用JmsSerializer

时间:2017-05-08 17:06:57

标签: json symfony jmsserializerbundle

我正在使用Symfony 3,FosRestBundle和JsmSerializerBundle。

我想在我的json响应中添加实体名称。

例:

{
  'user':
    {
      'id': 0
      'firstName': 'John',
      'lastName': 'Doe',
      'posts': [
        {
          'id': 0,
          'name': 'post name #1'
        },
        {
          'id': 1,
          'name': 'post name #2'
        },
      ]
    }
}

'user'是实体用户并发布实体Post。

构建我的json的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,您的json无效“帖子”可以是对象{}而不是数组[],并且不允许使用重复的密钥“post”。

为了获得每个实体的类型,可以为每个实体添加一个属性。

/**
 * @var string
 * @Serializer\Expose()
 */
private $entityType = 'user';

......你的json看起来像:

{
  "id": 0,
  "entityType": "user",
  "firstName": "John",
  "lastName": "Doe",
  "posts": [
    {
      "id": 0,
      "entityType": "post",
      "name": "post name #1"
    },
    {
      "id": 1,
      "entityType": "post",
      "name": "post name #2"
    }
  ]
}

Edit1:创建一个包装实体的响应对象

class GetUserResponse
{
    /**
     * @var User
     * @Serializer\Expose()
     * @Serializer\SerializedName(name="user")
     */
    protected $user;
}

应该返回

{
  'user':
    //.... 
 }