Hey zwracam się z prośbą. Otóż na chwile obecną pobieram liste produktów z DB :
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?
A w jakim formacie chcesz ją mieć docelowo?
(w podtekście - na pewno chodzi o javę?)
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();
}
}
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
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
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)
@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