#java #spring
Вопрос:
Я хочу создать массив данных и вернуть его через точку покоя. Я попробовал это:
@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()));
}
DTO:
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>
каков правильный wya для отображения ArrayList?
Комментарии:
1. Звоните
stream()
прямо по списку .2. Теперь я понимаю, что метод GetValue() не определен для строки типа
3. список-это не Карта, у Карты есть метод набора записей, у Списка-нет. Насколько трудно это понять?
4. Как исправить следующую ошибку?
5. Плохое название. Перепишите, чтобы обобщить вашу конкретную техническую проблему.
Ответ №1:
Ваша конечная точка rest должна выглядеть следующим образом:
@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 (для удобства понимания), а также поле внутри него (чтобы следовать соглашениям об именовании).
Комментарии:
1. Я получаю конструктор CardBrandsListDTO(Строка) не определен
2. Есть ли решение без добавления конструктора в CardBrandsListDTO?
3. Да, который будет выглядеть так: .map(g -> { CardBrandsListDTO dto = новый CardBrandsListDTO(); dto.setCard_brand(dto); возврат dto; }