В настоящее время я использую Dozer для всех отображений.
Я пытаюсь решить новое требование, и я решил использовать map-id для его решения.
- Когда вызывается конечная точка / продукты, должны быть представлены только корневые поля.
- Когда вызывается конечная точка / products / {id}, должны быть представлены все поля, включая вложенные.
Я понимаю, что у меня плохие результаты с идентификатором карты.
Итак, я спрашиваю:
- могу ли я использовать map-id для решения своих проблем? как?
- Есть ли другое решение? как?
/ продукты
С идентификатором карты в списке продуктов не отображается цена:
[
{
"id": "a5f206e4",
"name": "bike",
"type": "MOUNTAIN",
"description": "ddsfsdf",
"price": null
},
...
]
Без идентификатора карты в списке продуктов указана цена:
[
{
"id": "a5f206e4",
"name": "bike",
"type": "MOUNTAIN",
"description": "ddsfsdf",
"price": {
"unit": "€",
"value": 100
}
},
...
]
/ произведения / {ID}
Когда я звоню GET / products / {id}, я делаю
ProductDto productDto = Converter.DOZER.getMapper().map(product, ProductDto.class);
Сведения о продукте (если идентификатор карты не определен)
{
"product": {
"id": "a5f206e4",
"name": "bike",
"type": "MOUNTAIN",
"description": "ddsfsdf",
"price": {
"unit": "€",
"value": 100
},
"product_groups": [
{
"id": "066dd1a0-",
"name": "jjjjjjjjj",
"type": "OWNON",
"description": "Own",
"products": [
{
"id": "a5f206e4",
"name": "bike",
"type": "MOUNTAIN",
"description": "ddsfsdf",
"price": {
"unit": "€",
"value": 100
},
"product_groups": [
{
"id": "066dd1a0-",
"name": "jjjjjjjjj",
"type": "OWNON",
"description": "Own"
}
],
"products": []
}
]
}],
"products": [
....
]
}
}
Сведения о продукте (если определен идентификатор карты)
ProductDto productDto = Converter.DOZER.getMapper().map(product, ProductDto.class, "detail");
{
"product": {
"id": "a5f206e4",
"name": "bike",
"type": "MOUNTAIN",
"description": "ddsfsdf",
"price": {
"unit": "€",
"value": 100
},
"product_groups": [
{
"id": "066dd1a0-",
"name": "jjjjjjjjj",
"type": "OWNON",
"description": "Own",
"products": [
{
"id": "a5f206e4",
"name": "bike",
"type": "MOUNTAIN",
"description": "ddsfsdf",
"price": null, (is not null)
"product_groups": null, (is not null)
"products": null (is not null)
}
]
}],
"products": [
....
]
}
}
mappings.xml
<mapping type="one-way" map-null="true">
<class-a>com.xxx.ProductGroup</class-a>
<class-b>com.xxx.ProductGroupDto</class-b>
<field>
<a>products</a>
<b>productList</b>
</field>
</mapping>
<mapping type="one-way" map-null="true" map-id="detail">
<class-a>com.xxx.Product</class-a>
<class-b>com.xxx.ProductDto</class-b>
<field>
<a>priceValue</a>
<b>price.value</b>
</field>
<field>
<a>priceUnit</a>
<b>price.unit</b>
</field>
<field>
<a>products</a>
<b>productList</b>
</field>
<field>
<a>productGroups</a>
<b>productGroupList</b>
</field>
</mapping>
<!-- EVEN WITH THESE MAPPINGS, LIST OF PRODUCTS DOES NOT SHOW PRICE -->
<mapping type="one-way" map-null="true" >
<class-a>com.xxx.Product</class-a>
<class-b>com.xxx.ProductDto</class-b>
<field>
<a>priceValue</a>
<b>price.value</b>
</field>
<field>
<a>priceUnit</a>
<b>price.unit</b>
</field>
</mapping>