Как удалить часть значения хэш-карты? - PullRequest
0 голосов
/ 27 мая 2020

Итак, я создаю группу раскрывающихся списков, которые полагаются друг на друга, и построил запрос для получения кода и описания для объекта типа продукта, семейства и модели. Я использовал вложенные хэш-карты для отображения всех данных и объектов. Это было нормально, потому что я могу просто вызвать всю необходимую информацию из хэш-карт. Однако, когда дело доходит до REST API, он будет отображать всю вложенную информацию для каждой из хэш-карт, когда я их вызываю. Для каждой карты у меня есть ключ, а затем значение состоит из кода, Des c и хэш-карты следующего объекта.

Итак, это будет примерно так:

Main hashmap
 - Key
 - value
    -> code
    -> desc
    -> product family hashmap
       -- key
       -- value
          --> code
          --> desc
          --> product model hashmap
              --- key
              --- value
                  ---> code
                  ---> desc  

Мой главный вопрос заключается в том, как отключить отображение этих дополнительных хэш-карт в формате json при просмотре REST API через Интернет. браузер? Или мне нужно / нужно просто полностью удалить дополнительную информацию?

@Service
public class ProductDAOImpl implements ProductDAO {
    @PersistenceContext
    private EntityManager em;

    @Override
    public Map<String, ProductType> getProductTypeStructure() {
        HashMap<String, ProductType> prodTypes = new HashMap<>();
        Query q = em.createNativeQuery("<query>");


        List<Object[]> prodTypeEntities = q.getResultList();
        final String badData = "XX-BAD-XX";
        ProductType prodType = new ProductType(badData, "");
        ProductFamily prodFamily = new ProductFamily(badData, "");


        for(Object[] prodTypeEntity : prodTypeEntities) {


            if (prodTypeEntity[1] == null || prodTypeEntity[3] == null || prodTypeEntity[5] == null) {
                continue;
            }

            String prodTypeCd = prodTypeEntity[0].toString().toUpperCase();
            String prodTypeDesc = StringUtils.trimTrailingWhitespace(prodTypeEntity[1].toString()).toUpperCase(); 

            String prodFamilyCd = prodTypeEntity[2].toString().toUpperCase();
            String prodFamilyDesc = StringUtils.trimTrailingWhitespace(prodTypeEntity[3].toString()).toUpperCase(); 

            String prodModelCd = prodTypeEntity[4].toString().toUpperCase();
            String prodModelDesc = StringUtils.trimTrailingWhitespace(prodTypeEntity[5].toString()).toUpperCase(); 

            if(!prodType.getCode().equalsIgnoreCase(prodTypeCd)) {   
                prodType = new ProductType(prodTypeCd, prodTypeDesc); 
                prodType.setProdFamilies(new HashMap<String, ProductFamily>());
                prodTypes.put(prodType.getCode(), prodType);

                prodFamily.setCode(badData);
            }

            if(!prodFamily.getCode().equalsIgnoreCase(prodFamilyCd)) {
                prodFamily = new ProductFamily(prodFamilyCd, prodFamilyDesc);
                prodFamily.setProdModels(new HashMap<String, ProductModel>());
                prodType.getProdFamilies().put(prodFamily.getCode(), prodFamily);
            }
            prodFamily.getProdModels().put(prodModelCd, new ProductModel(prodModelCd, prodModelDesc));

        }    
        return prodTypes;
    }

}

1 Ответ

1 голос
/ 27 мая 2020

Если я правильно понял ваш вопрос, я думаю, что здесь ответом может быть объект DTO. Вы добавляете к нему только те значения, которые могут понадобиться раскрывающемуся списку, и возвращаете их из REST API.

Вот подробнее о DTO.

...