2017-06-19 24 views
0

今日、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]が必要です。

これについてアドバイスをお持ちの場合は、ありがとう

+0

'List 'は使用しないでください。ペットIDをキーとする 'Map 'を使用してください。そうすれば、id-by-idとid-by-idは高速です。 Mapの 'values()'メソッドを使ってペットのリストを取得することができます。 – Andreas

+0

1つの方法は、指定されたidがオブジェクトのidと一致する場合、オブジェクトを反復して削除することができます。 –

答えて

0

petididPetと比較できます。これにより、正しいPPetをArrayListから取り出すことができます。至福の方法を変更してください:

@Override 
    public Pet getPet(int petId) { 
    for (Pet _pet : datas) 
      if (_pet.getId() == petId) 
     return pet; 
    return null; 
    } 

    @Override 
    public Pet removePet(int petId) { 
    Pet pet =null; 
    if((pet= getPet(petId))!=null){ 
     datas.remove(pet); 
    return pet; 
    } 
    return null; 
    } 

    @Override 
    public int updatePet(int petId, Pet pet) { 
    if(petId<datas.size()) 
    datas.set(petid,pet); 
return pet.getId(); 
    } 
+0

ありがとう!これはうまくいった;)! –

関連する問題