为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信