今日、Spring(Javaフレームワーク)を学び始めたばかりで、データベースを使う代わりにクラスのArrayListを使ってすべてのCRUDメソッドを実装したかったのです。クラスのArrayListを使ってSpringでCRUDを実装する
私はリストを作成して、メソッドを追加することが簡単に管理が、IDの問題は、(削除/選択/ updateメソッドのために)到着したとき、私の心の中でイム本当に混乱して...
をだからここにあります私のペットクラス:ここ
public class Pet {
int id;
String name;
int age;
String owner;
public Pet() {}
public Pet(int id, String name, int age, String owner) {
this.id = id;
this.name = name;
this.age = age;
this.owner = owner;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
}
が私のArrayListとCRUDメソッドです:
0:private List<Pet> datas = new ArrayList<>();
@PostConstruct
private void initPetList() {
datas.add(new Pet(1, "Medor", 12, "Peter"));
datas.add(new Pet(2, "Mistigri", 5, "Jack"));
datas.add(new Pet(3, "Pepette", 8, "Sarah"));
}
@Override
public List<Pet> getPets() {
return datas;
}
@Override
public int addPet(Pet pet) throws PetAlreadyExistsException {
for (Pet _pet : datas) {
if (_pet.getId() == pet.getId()) {
throw new PetAlreadyExistsException();
}
}
datas.add(pet);
return pet.getId();
}
@Override
public Pet getPet(int petId) {
return datas.get(petId);
}
@Override
public Pet removePet(int petId) {
return datas.remove(petId);
}
@Override
public int updatePet(int petId, Pet pet) {
datas.set(petId, pet);
return pet.getId();
}
そして、ここでは私のコントローラであり、
@RequestMapping(value = "", method = RequestMethod.GET)
public ResponseEntity<List<Pet>> listPets() {
return new ResponseEntity<>(petService.getPets(), HttpStatus.OK);
}
@RequestMapping(value = "", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<Integer> addPet(@RequestBody Pet pet) throws PetAlreadyExistsException {
return new ResponseEntity<>(petService.addPet(pet), HttpStatus.OK);
}
@RequestMapping(value = "/{petId}", method = RequestMethod.GET)
public ResponseEntity<Pet> findPetById(@PathVariable int petId) {
return new ResponseEntity<>(petService.getPet(petId), HttpStatus.OK);
}
@RequestMapping(value = "/{petId}", method = RequestMethod.PUT, consumes = "application/json")
public ResponseEntity<Integer> updatePetById(@RequestBody Pet pet) {
return new ResponseEntity<>(petService.updatePet(pet.getId(), pet), HttpStatus.OK);
}
@RequestMapping(value = "/{petId}", method = RequestMethod.DELETE)
public ResponseEntity<Pet> removePetById(@PathVariable int petId) {
return new ResponseEntity<>(petService.removePet(petId), HttpStatus.OK);
}
私が見ることができるように、私は削除メソッドを作成し、クラスのIDをキャッチしようとします。しかし、問題は私のIDは私のArrayList内の行であり、私はpetIdと呼ばれる新しいintを作成するとき、これは配列のインデックスを返すので、私の要求では: "http://localhost:8080/pets/1" id "2"を持っている!そして私はインデックスではなくIDでフィルタリングする方法を知りません!
私が必要とするのは、ID番号1を要求したときと同じですが、Idの値が「1」の配列[0]が必要です。
これについてアドバイスをお持ちの場合は、ありがとう
'List'は使用しないでください。ペットIDをキーとする 'Map 'を使用してください。そうすれば、id-by-idとid-by-idは高速です。 Mapの 'values()'メソッドを使ってペットのリストを取得することができます。 –
Andreas
1つの方法は、指定されたidがオブジェクトのidと一致する場合、オブジェクトを反復して削除することができます。 –