【问题标题】:Jakson custom serializer for list of objects用于对象列表的 Jakson 自定义序列化程序
【发布时间】:2021-01-17 23:16:04
【问题描述】:

我有一个自定义的 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);
        }

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

【问题讨论】:

  • 您的getSale() 方法不可编译。它声明的返回类型是Sale,但它实际上返回一个String

标签: json spring serialization jackson


【解决方案1】:

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

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;

    }

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多