亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Spring Rest 將 ID 轉換為類類型

使用 Spring Rest 將 ID 轉換為類類型

慕尼黑5688855 2023-09-13 16:57:22
我正在嘗試使用 Spring Boot 開發通用的 CRUD,我的通用實體基類使用serializable@MappedSuperclasspublic abstract class Entidade<T extends Serializable> implements Serializable {    private static final long serialVersionUID = 1L;    public abstract T getId();    public abstract T setId(T id);}@Entity@Table(name = "cachorro")@Getter@Setter@NoArgsConstructorpublic class Cachorro extends Entidade<Long> {    @Id    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cachorro_seq")     private Long id;    @Column(length = 100, nullable = false)    private String nome;    @Override    public Long getId() {        return this.id;    }    @Override    public Long setId(Long id) {        return this.id;    }}因此,當我調用休息方法時,它會拋出一個異常,告訴您使用存儲庫方法時的轉換。@NoRepositoryBeanpublic interface AbstratoRepository<E extends Entidade<?>> extends JpaRepository<E, Serializable> {}@Repositorypublic interface CachorroRepository extends AbstratoRepository<Cachorro> {}套餐服務public interface IAbstratoService<E> {    public List<E> carregarTodos();    public Optional<E> carregarPeloCodigo(Serializable id);    public void inserir(E entidade);    public void atualizar(E entidade);    public void deletar(Serializable id);}public class AbstratoServiceImpl<T extends Serializable, E extends Entidade<?>, R extends AbstratoRepository<E>>        implements IAbstratoService<E> {    @Autowired    private R repositorio;    @Override    public List<E> carregarTodos() {        return this.repositorio.findAll();    }    @Override    public Optional<E> carregarPeloCodigo(Serializable id) {        return this.repositorio.findById(id);    }    @Override    public void inserir(E entidade) {        this.repositorio.save(entidade);    }    @Override    public void atualizar(E entidade) {        this.repositorio.save(entidade);    }    @Override    public void deletar(Serializable id) {        this.repositorio.deleteById(id);    }}@Servicepublic class CachorroService extends AbstratoServiceImpl<Long, Cachorro, CachorroRepository> {}
查看完整描述

1 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

我非常確定這里的錯誤如下 => AbstratoServiceImpl 和 AbstratoResource 應該使用 T 并且不可序列化 id 字段。以下是一個很好的起點。


public abstract class AbstratoResource<ID, E extends Entidade<ID>, S extends IAbstratoService<E>> {


    @Autowired

    protected S service;


    @GetMapping("/carregarTodos")

    public List<E> carregarTodos() {

        return this.service.carregarTodos();

    }


    @GetMapping("/carregarPeloCodigo/{id}")

    public Optional<E> carregarPeloCodigo(@PathVariable("id") ID id) {

        return this.service.carregarPeloCodigo(id);

    }


    @PostMapping("/inserir")

    public void inserir(E entidade) {

        this.service.inserir(entidade);

    }


    @PutMapping("/atualizar")

    public void atualizar(E entidade) {

        this.service.atualizar(entidade);

    }


    @DeleteMapping("/deletar")

    public void deletar(ID id) {

        this.service.deletar(id);

    }

}


public interface IAbstratoService<E> {


    public List<E> carregarTodos();

    public Optional<E> carregarPeloCodigo(ID id);

    public void inserir(E entidade);

    public void atualizar(E entidade);

    public void deletar(ID id);


}


public class AbstratoServiceImpl<ID, T extends Serializable, E extends Entidade<ID>, R extends AbstratoRepository<E>>

        implements IAbstratoService<E> {


    @Autowired

    private R repositorio;


    @Override

    public List<E> carregarTodos() {

        return this.repositorio.findAll();

    }


    @Override

    public Optional<E> carregarPeloCodigo(ID id) {

        return this.repositorio.findById(id);

    }


    @Override

    public void inserir(E entidade) {

        this.repositorio.save(entidade);

    }


    @Override

    public void atualizar(E entidade) {

        this.repositorio.save(entidade);

    }


    @Override

    public void deletar(ID id) {

        this.repositorio.deleteById(id);

    }

}


@Service

public class CachorroService extends AbstratoServiceImpl<Long, Cachorro, CachorroRepository> {

}



查看完整回答
反對 回復 2023-09-13
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號