用于对象列表的 Jakson 自定义序列化程序

Jakson custom serializer for list of objects

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

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

效果很好,但我想要 return 一组非常具体的数据,所以我制作了一个自定义序列化程序,它也适用但仅适用于单个对象:

        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);
        }

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

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

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;

    }