jakson对象列表的自定义序列化程序

7tofc5zh  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(416)

我有一个定制的jackson序列化程序,它可以序列化单个pojo。我正在尝试序列化对象列表。如果没有自定义序列化程序,我可以:

public List<Sale> getAllSales() {
    return saleRepository.getAll();
}

这很好,但我想返回一组非常特定的数据,因此我制作了一个自定义序列化程序,它也可以工作,但只适用于单个对象:

public Sale getSale(int id) {

            ObjectMapper mapper = new ObjectMapper();
            SimpleModule module = new SimpleModule();
            module.addSerializer(Sale.class, new SaleSerializer());
            mapper.registerModule(module);

            Sale sale = saleRepository.findById(1).orElse(null);

            return mapper.writeValueAsString(sale);
        }

如何实现对象列表的自定义序列化程序?

u0njafvf

u0njafvf1#

我不确定这是不是最好的方法,但我最终还是这样做了。

public ArrayNode getAllSalesToday() throws JsonProcessingException {

        LocalDate localDate = LocalDate.now();
        LocalDateTime startOfDay = localDate.atStartOfDay();
        LocalDateTime endOfDay = localDate.atTime(LocalTime.MAX);

        ObjectMapper mapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(Sale.class, new SaleSerializer());
        mapper.registerModule(module);

        List<Sale> saleList = saleRepository.getAllByInitialDepositDateIsBetween(startOfDay,endOfDay);
        ArrayNode arrayNode = mapper.createArrayNode();

        for (Sale sale: saleList){
            String x = mapper.writeValueAsString(sale);
            JsonNode jsonNode = mapper.readTree(x);
            arrayNode.add(jsonNode);
        }

        return arrayNode;

    }

相关问题