Java Json Konwersja

0

Hey zwracam się z prośbą. Otóż na chwile obecną pobieram liste produktów z DB :
screenshot-20210802161357.png
Chciałbym usunąć z kazdego produktu wiersz z jego id i nie wiem w jaki sposób to wykonać. Dodam że tą liste posiadam w formacie json. Czy ktoś poratuje?

0

A w jakim formacie chcesz ją mieć docelowo?
(w podtekście - na pewno chodzi o javę?)

0

Na chwile obecną pobieram liste produktów i w pętli pojedyńczo chce dodawać produkty do baselinker-a. Te tzw parametry podaje w formacie json. Aby dodać pojedyńczy element muszę usunąć product_id gdyż służy on jedynie do update.

public List<Product> getAllProductList() {
        return jpaProductsRepository.findAll().stream().map(Factory::toDomain).collect(Collectors.toList());
    }
    public void saveToBaseLinker() throws Exception {
        for (int i = 0; i <getAllProductList().size() ; i++) {
            ObjectMapper mapper = new ObjectMapper();
            ArrayList al = new ArrayList(getAllProductList());
            System.out.println(al);
            DocumentContext doc = JsonPath.parse(mapper.writeValueAsString(getAllProductList().get(i)));
            doc.delete("product_id:"+i);
            System.out.println(mapper.writeValueAsString(getAllProductList().get(i)));
            OkHttpClient client = new OkHttpClient().newBuilder()
                    .build();
            MediaType mediaType = MediaType.parse("text/plain");
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("token", "3001881-3008391-EFE0EZIWCEMBLV0LR")
                    .addFormDataPart("method", "addProduct")
//                    .addFormDataPart("parameters", "{\"storage_id\": \"bl_1\",\"name\":\"konopka\",\"category_id\":222994}")
                    .addFormDataPart("parameters", mapper.writeValueAsString(getAllProductList().get(i)))
                    .build();
            Request request = new Request.Builder()
                    .url("https://api.baselinker.com/connector.php")
                    .method("POST", body)
                    .build();
            Response response = client.newCall(request).execute();
        }
    }
2

Po pierwsze to bardzo zły kod. Mam nadzieję że masz włączone cache dla JPA bo inaczej select dla getAllProductList() wykona się z 5 razy.

A merytorycznie odpowiadając - IMHO najlepiej by było jakbyś miał ProductDTO bez id

0

To co piszesz jest w rozbieżności z kodem (powstrzymuję się od słów po góralsku)

Twierdzisz, że źródłem jest JSON, w kodzie źródłem jest baza danych

3

Tak to jest, uczyć Springa kogoś, kto nie ugruntował ani algorytmiki, ani definiowania zagadnień, ani Javy (pętla for(int i, jak ja to kocham)

0

@betowen27 zrób sobie i nam przyjemność i weź wydziel z tego metody jak człowiek. Np. zrób sobie osobną metodę submitProduct(ProductDTO dto) która zajmuje się tylko wysłaniem payloadu a ProductDTO to obiekt który zawiera tylko te pola które chcesz. Następnie zrób metodę Product convertToDTO(Product product) która bierze Product i zamienia go w ProductDTO. Na koniec twoja fukcja będzie wyglądać tak:

jpaProductsRepository
    .findAll()
    .stream()
    .map(Factory::toDomain)
    .map(this::convertToDTO)
    .forEach(this::submitProduct);

Kolejny krok to powkładanie tych metod w należne im miejsca -> convertToDTO powinno być w klasie Product a submitProduct w jakimś BaselinerAPIClient

1 użytkowników online, w tym zalogowanych: 0, gości: 1