Spring Boot - Flatten JSON Entity, возвращенный спецификацией JPA для экспорта в Excel - PullRequest
0 голосов
/ 09 июля 2020

Я создаю проект Spring Boot для управления запасами. У меня есть объект под названием InwardInventory, который имеет отношение один ко многим с другим объектом, называемым InwardOutwardList. Я использую спецификацию JPA для фильтрации Entity InwardInventory, и она работает нормально. Ответ, который я получаю после фильтрации:

{
    "inwardInventory": {
        "content": [
            {
                
                "inwardid": 19497,
                "date": "2019-05-28",
                "vehicleNo": "TRUCK",
                "supplierSlipNo": "",
                "ourSlipNo": "",
                "inwardOutwardList": [
                    {
                        "entryid": 19499,
                        "product": {
                            "productName": "Cement",
                          },
                        "quantity": 100.0
                    },
                    {
                        "entryid": 19500,
                        "product": {
                            "productName": "Iron",
                          },
                        "quantity": 30.0
                    }
                ],
                "warehouse": {
                    "warehouseName": "war2"
                },
                "supplier": {
                    "name": "Bright Traders"
                }
            }
        ]
    }
}

Теперь я хочу экспортировать эти данные в Excel. Итак, мне нужно сгладить этот ответ примерно так. Однако это не кажется оптимизированным решением.

Я также не могу использовать проекции или собственные запросы с настраиваемыми столбцами выбора, потому что они не могут быть интегрированы со спецификацией jpa. Может ли кто-нибудь предложить мне лучший подход, который можно использовать для достижения этой цели наиболее оптимальным образом.

Спасибо.

1 Ответ

0 голосов
/ 11 июля 2020

Обработано с помощью специального сериализатора. Пример кода ниже

@Component
public class OutwardExportSerializer extends StdSerializer<OutwardInventoryExportDAO> 
{
    private static final long serialVersionUID = 1L;
    protected OutwardExportSerializer(Class<OutwardInventoryExportDAO> t) 
    {
        super(t);
    }
    protected OutwardExportSerializer() 
    {
        this(null);
    }
    @Override
    public void serialize(OutwardInventoryExportDAO value, JsonGenerator gen, SerializerProvider provider) throws IOException 
    {
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        for(InwardOutwardList ioList:value.getInwardOutwardList())
        {
            System.out.println("Serialization starts for OutWardID"+value.getOutwardid());
            gen.writeStartObject();
            gen.writeNumberField("outwardid", value.getOutwardid());
            gen.writeStringField("date",df.format(value.getDate()));
            gen.writeStringField("purpose",value.getPurpose()!=null?value.getPurpose():"");
            gen.writeStringField("slipNo",value.getSlipNo()!=null?value.getSlipNo():"");
            gen.writeStringField("product",ioList.getProduct().getProductName()!=null?ioList.getProduct().getProductName():"");
            gen.writeStringField("measurement unit",ioList.getProduct().getMeasurementUnit()!=null?ioList.getProduct().getMeasurementUnit():"");
            gen.writeNumberField("quantity",ioList.getQuantity()!=null?ioList.getQuantity():0.0);
            gen.writeNumberField("closing stock",ioList.getClosingStock()!=null?ioList.getClosingStock():0.0);
            gen.writeStringField("warehouse",value.getWarehouse()!=null?value.getWarehouse():"");
            gen.writeStringField("contractor",value.getContractor()!=null?value.getContractor():"");
            gen.writeStringField("additionalInfo",value.getAdditionalInfo()!=null?value.getAdditionalInfo():"");
            gen.writeStringField("usageLocation",value.getUsageLocation()!=null?value.getUsageLocation():"");
            gen.writeStringField("usageArea",value.getUsageArea()!=null?value.getUsageArea():"");
            gen.writeEndObject();
            System.out.println("Serialization ends for OutWardID"+value.getOutwardid());
        }
        
    }
}
...