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?
Java Json Konwersja
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3561
A w jakim formacie chcesz ją mieć docelowo?
(w podtekście - na pewno chodzi o javę?)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
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();
}
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Silesia/Marki
- Postów: 5549
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3561
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3561
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)
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
@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