Я хочу составить список, содержащий только название города, не более. Citiets не должен повторяться, мне нужны все названия города, но без повторных названий.
Сущность выглядит так:
import org.springframework.data.annotation.Id;
import java.util.Arrays;
public class Cities {
@Id
private String _id;
private String city;
private String[] loc;
private String pop;
private String state;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
String getLocation() {
return loc[0] + " " + loc[1];
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String[] getLoc() {
return loc;
}
public void setLoc(String[] loc) {
this.loc = loc;
}
public String getPop() {
return pop;
}
public void setPop(String pop) {
this.pop = pop;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "Cities{" +
"_id='" + _id + '\'' +
", city='" + city + '\'' +
", loc=" + Arrays.toString(loc) +
", pop='" + pop + '\'' +
", state='" + state + '\'' +
'}';
}
}
У меня есть мой репозитой, как это:
import com.sbmongo.starbucks.Entity.Cities;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("citiesRepository")
public interface CitiesRepository extends MongoRepository<Cities, String> {
public Cities findBy_id(ObjectId _id);
public List<Cities> findByCity(String city);
public List<Cities> findAllByCity();
}
А мой контроллер выглядит так:
import com.sbmongo.starbucks.Constant.ViewConstant;
import com.sbmongo.starbucks.Entity.Cities;
import com.sbmongo.starbucks.Repository.CitiesRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@Controller
@RequestMapping("/starbucks")
public class CitiesController {
@Autowired
@Qualifier("citiesRepository")
private CitiesRepository citiesRepository;
@GetMapping("/cities")
public ModelAndView listCities(){
ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
mav.addObject("cities", citiesRepository.findAll());
return mav;
}
@GetMapping("/searchCity")
public ModelAndView searchCity(@RequestParam(name = "city", required = false)String city){
ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
mav.addObject("cities", citiesRepository.findByCity(city.toUpperCase()));
System.out.println(citiesRepository.findByCity(city.toUpperCase()));
return mav;
}
@GetMapping("/sortAllCities")
public void sortAllCities(){
List<Cities> cities = citiesRepository.findAllByCity();
}
}
Но когда я пытаюсь это сделать, я выкидываю исключение IndexOutOfBoundsException.
Я просто хочу показать в списке названия городов и не повторять их.