Я хочу создать ArrayList данных и вернуть его через точку отдыха. Я пробовал это:
@Service
public class CardBrandsListService {
public ArrayList<String> getCardBrandsList() {
ArrayList<String> list = new ArrayList<String>();
list.add("visa");
list.add("master");
list.add("Intl Maestro");
list.add("amex");
return list;
}
}
Конечная точка отдыха:
@GetMapping("/card_brand/list")
public ResponseEntity<?> getCurruncy() {
return ResponseEntity.ok(cardBrandsListService.getCardBrandsList().entrySet().stream()
.map(g -> new CardBrandsListDTO(g.getValue())).collect(Collectors.toList()));
}
ДТО:
public class CardBrandsListDTO {
private String card_brand;
public String getCard_brand() {
return card_brand;
}
public void setCard_brand(String card_brand) {
this.card_brand = card_brand;
}
}
Но я получаю сообщение об ошибке: The method entrySet() is undefined for the type ArrayList<String>
Как правильно отображать ArrayList?
Я получаю сейчас Метод getValue() не определен для типа String
Список не является картой, у карты есть метод entrySet, а у списка нет. Насколько это сложно понять?
Как исправить следующую ошибку?
Плохой заголовок. Перепишите, чтобы резюмировать вашу конкретную техническую проблему.
Ваша конечная точка отдыха должна выглядеть следующим образом:
@GetMapping("/card_brand/list")
public ResponseEntity<List<CardBrandsListDTO>> getCurruncy() {
return ResponseEntity.ok(cardBrandsListService.getCardBrandsList().stream()
.map(g -> new CardBrandsListDTO(g)).collect(Collectors.toList()));
Вы вызываете entrySet()
, который используется для получения набора записей объекта Map (которого у вас нет). Кроме того, внутри функции карты ваша переменная g
является строкой (поскольку вы возвращаете ArrayList<String>
), поэтому вы можете напрямую передать ее конструктору. И вы также можете напрямую установить правильный тип для ResponseEntity
.
ОБНОВИТЬ:
И вам нужен соответствующий конструктор:
public class CardBrandsListDTO {
private String card_brand;
public CarBrandsListDTO(String card_brand) {
this.car_brand = car_brand;
}
//getter and setter
}
Кстати, я бы посоветовал переименовать DTO (для понятности), а также поле внутри него (для соблюдения правил именования)
Я получаю конструктор CardBrandsListDTO (String) не определен
Есть ли решение без добавления конструктора в CardBrandsListDTO?
Да, это будет выглядеть так: .map(g -> { CardBrandsListDTO dto = new CardBrandsListDTO(); dto.setCard_brand(dto); return dto; }
Звоните
stream()
прямо по списку.