private List<String> itemsInCart = new ArrayList<>();
private List<String> itemObjectsInCart = new ArrayList<>();
@CrossOrigin
@GetMapping(value = "/cartitems")
public List<String> getItemsInCart(@RequestParam("buyerId") Integer buyerId) {
if (cartRepository.findByBuyerIdAndIsCompleted(buyerId, false) != null){
return getItemObjects(cartRepository.findByBuyerIdAndIsCompleted(buyerId, false).getItemsInCart());
} else {
return itemsInCart;
}
}
public List<String> getItemObjects(List<String> itemsInCart){
for (String item: itemsInCart) {
String uri = "http://192.168.160.182:8762/item-service/items/" + item;
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);
JSONObject jsonObject = new JSONObject(result);
System.out.println(jsonObject);
if (itemObjectsInCart.contains(result)){
return itemObjectsInCart;
} else {
itemObjectsInCart.add(result);
}
}
return itemObjectsInCart;
}
Привет, ребята! Мой код выше возвращает JSON в этом формате:
["{\"id\":1,\"name\":\"Stick\",\"description\":\"A stick\",\"price\":100,\"available\":true,\"img\":\"https://vignette.wikia.nocookie.net/tokipona/images/a/aa/Stick.png/revision/latest?cb=20171120043817\",\"uploadDate\":\"2019-01-16\",\"sellerId\":1}"]
Но хотелось бы без обратных косых черт. Вы знаете, как я могу преобразовать его в правильный массив JSON?
Заранее спасибо!
Вы возвращаете список строк json. Вам нужно будет либо вернуть строку один, содержащую json, либо позволить контроллеру сделать это за вас, но в последнем случае вы не должны конвертировать свои данные в json самостоятельно.




Добавьте @ResponseBody в свой метод обработчика запросов или аннотируйте свой контроллер как @RestController.
Убедитесь, что у вас есть конвертер jackson в пути к классам. Вы можете следовать этому руководству - https://www.journaldev.com/2552/spring-rest-example-tutorial-spring-restful-web-services
Не используйте JSONObject для сопоставления с JSON и не читайте String напрямую. Создайте новый класс POJO для ответа и позвольте RestTemplate сделать всю работу. Внутри Spring будет использовать подходящий конвертер для сопоставления объектов:
public class Item {
int id;
String name;
String description;
// other fields
// getters and setters
}
Item result = restTemplate.getForObject(uri, Item.class);
Ваш метод контроллера также должен возвращать Item, а не String:
@GetMapping"/cartitems")
public List<Item> getItemsInCart(@RequestParam("buyerId") Integer buyerId) {
// ...
}
Вы можете использовать аннотацию @RestController, и ответ будет возвращен как json.