Нам нужно отправить список сертификатов в другое приложение с помощью REST API. Итак, ответ объекта содержит
[
{
"id":1,
"orderId":123,
"certificateStatus":true,
"certificateNo":"xyz123abc",
"customer":{
"id":36,
"email":"[email protected]",
"firstName":"abc",
"lastName":"dfg",
"user":{
"id":23,
"username":"[email protected]",
"enabled":true,
"kycStatus":false
},
"_links":{
"self":{
"href":"/app_dev.php/api/v1/customers/36"
}
}
},
"orderItem":{
"id":60,
"quantity":2,
"unitPrice":177581,
"total":355162,
"units":[
{
"id":1711,
"adjustments":[
],
"adjustmentsTotal":0
},
{
"id":1712,
"adjustments":[
],
"adjustmentsTotal":0
}
],
"unitsTotal":355162,
"adjustments":[
],
"adjustmentsTotal":0,
"variant":{
"id":334,
"code":"pool-gold-1oz",
"optionValues":[
],
"position":0,
"translations":{
"en_US":{
"locale":"en_US",
"id":334
}
},
"version":2,
"tracked":false,
"channelPricings":{
"UK_WEB":{
"channelCode":"UK_WEB",
"price":177582
},
"US_WEB":{
"channelCode":"US_WEB",
"price":177581
}
},
"_links":{
"self":{
"href":"/app_dev.php/api/v1/products/pool-gold-1oz/variants/pool-gold-1oz"
}
}
},
"_links":{
"order":{
"href":"/app_dev.php/api/v1/orders/29"
},
"product":{
"href":"/app_dev.php/api/v1/products/pool-gold-1oz"
},
"variant":{
"href":"/app_dev.php/api/v1/products/pool-gold-1oz/variants/pool-gold-1oz"
}
}
}
}
]
Я хочу получить ответ JSON примерно так, как показано ниже. - которым нужны дополнительные настраиваемые поля - код состояния и сообщение - дополнительные поля - удалить ненужные поля
{
"code":"custom_code_xxx",
"message":"Successful",
"data":[
{
"custom_extra_fields1":"asd",
"custom_extra_fields2":"xyz",
"id":1,
"orderId":123,
"certificateStatus":true,
"certificateNo":"xyz123abc",
"customer":{
"id":36,
"email":"[email protected]",
"firstName":"abc",
"lastName":"dfg",
"user":{
"id":23,
"username":"[email protected]",
"enabled":true,
"kycStatus":false
}
},
"orderItem":{
"id":60,
"quantity":2,
"unitPrice":177581,
"total":355162,
"unitsTotal":355162
}
}
]
}
Какие лучшие практики мы можем использовать для упрощения ответа JSON? или нам нужно построить массив в нужном формате




Когда вы используете что-то вроде, например, Пакет сериализатора JMS вы можете использовать
Виртуальные свойства для дополнительных настраиваемых полей.
И Группы и / или Политика исключения, чтобы избавиться от ненужных полей.
При использовании Сериализатор Symfony у вас есть как минимум опция Группы для исключения некоторых полей.
Чтобы добавить дополнительные поля, я бы либо использовал просто дополнительный Getter в вашем Entity (не чистый подход, но помогает), либо работал с настраиваемыми нормализаторами и / или кодировщиками.
Насколько я понимаю, экспозиция будет применима к полной модели. Но в моем случае мне нужно скрыть некоторые поля в одном API, которые могут потребоваться для отображения в другом API.
@stefun - так ты проверил мой другой вариант: Группы? он доступен для обоих распространенных сериализаторов - какой из них вы используете?
Стефун,
Вы должны создать новый объект передачи данных, содержащий свойства, которые вы хотите использовать в качестве ответа. Затем верните этот объект как json.
Затем вы создаете класс ассемблера, который строит ваш DTO на основе исходного объекта.
какая-либо причина для -1?