카테고리 없음

객체 목록을위한 Jakson 커스텀 시리얼 라이저

기록만이살길 2021. 3. 1. 05:07
반응형

객체 목록을위한 Jakson 커스텀 시리얼 라이저

1. 질문(문제점):

사용자 지정 jackson serializer가 있으며 단일 pojo를 직렬화하는 데 작동합니다. 개체 목록을 직렬화하려고합니다. 사용자 지정 serializer없이 다음을 수행 할 수 있습니다.

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

잘 작동하지만 매우 구체적인 데이터 집합을 반환하고 싶으므로 단일 개체에 대해서만 작동하는 사용자 지정 serializer를 만들었습니다.

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

개체 목록에 대한 사용자 지정 serializer를 구현하려면 어떻게해야합니까?

2. 해결방안:

이것이 최선의 방법인지 확실하지 않지만 결국 이렇게하게되었습니다.

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;

    }
65766975
반응형