0
タイトルのように、POSTリソースのときに自動生成IDを取得する方法を見つけようとしています。nullまたはデフォルトの代わりに自動生成されるId 0
私はembaded h2またはhsqldbデータベースを使用します。
私はすでにテストしていましたか?
- 私は(結果GET:デフォルトの0は、デフォルトのヌルのために変更)ロングのために長い変更
- (私はAUTOが身元を同じにする必要があることを知っているが、とにかく試してみました)アイデンティティのための戦略を変更し、私は
- ここで
(?私は本当にPOSTメソッドからIDを削除する必要があります)例えばポストの多くをreadedこの答えはsimilar post answer固体に見えますが、私は私の場合は違うと思うが、私のコードです:
コントローラー:
package spring.degath.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import spring.degath.data.PhoneRepository;
import spring.degath.model.Phone;
import spring.degath.services.PhoneService;
import java.util.List;
@RestController
public class PhoneController {
@Autowired
private PhoneService phoneService;
@Autowired
private PhoneRepository phoneRepository;
@RequestMapping(method = RequestMethod.GET, value = "/phones")
public List<Phone> getAllPhones(){
return phoneService.getAllPhones();
}
@RequestMapping(method = RequestMethod.GET, value = "/phones/{id}")
public Phone getPhone(@PathVariable Long id){
return phoneService.getPhone(id);
}
@RequestMapping(method = RequestMethod.POST, value = "/phones")
public void addPhone(@RequestBody Phone phone){
phoneService.addPhone(phone);
}
}
サービス:
package spring.degath.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import spring.degath.data.PhoneRepository;
import spring.degath.model.Phone;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
@Service
public class PhoneService {
private List<Phone> phones;
@Autowired
private PhoneRepository phoneRepository;
public List<Phone> getAllPhones(){
return phones;
}
public Phone getPhone(final Long id){
return phoneRepository.findById(id);
}
public void addPhone(Phone phone) {
phones.add(phone);
}
@PostConstruct
private void initDataForTesting() {
phones = new ArrayList<Phone>();
Phone phone1 = new Phone((long) 1,"nokia");
Phone phone2 = new Phone((long) 2,"sony");
Phone phone3 = new Phone((long) 3,"samsung");
phones.add(phone1);
phones.add(phone2);
phones.add(phone3);
}
}
リポジトリ:
package spring.degath.data;
import org.springframework.data.repository.CrudRepository;
import spring.degath.model.Phone;
public interface PhoneRepository extends CrudRepository<Phone, String> {
Phone findById(Long id);
}
モデル:
package spring.degath.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
@Entity
public class Phone {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NotNull
private Long id;
private String brand;
public Phone(){
}
public Phone(Long id, String brand) {
super();
this.id = id;
this.brand = brand;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
は、私が何をすべきか見当もつかない。あなたの知識を共有してください。
幸運を祈り、 Degath