Generi c API получения данных на основе имени объекта и его первичного ключа - PullRequest
0 голосов
/ 26 мая 2020

Я разрабатываю общий c API для извлечения данных на основе имени объекта и его первичного ключа. URL-адрес для получения сопоставления: api/fetch/{id}/data/{entity} Существует много сущностей, таких как студент, курс, преподаватель, класс ... На основе имени сущности API должен возвращать данные для этой сущности по заданному идентификатору в URL-адресе. Каким должен быть лучший подход с использованием весенней загрузки и JPA? Попытка выполнить ниже, но не может работать, когда количество сущностей велико и продолжает расти. Нужен общий подход c.

    @RestController
    public class Datacontroller{
    @Autowired
    CourseRepo courserepo;

    @Autowired
    Studentrepo studentrepo;

    @GetMapping("api/fetch/{id}/data/{entity}")
        public <T> T getData(@PathVariable("id") String id, @PathVariable("entity") String entity) {
            T l = null;
            //depending on entity
            if("course".equals(entity)) {
                Optional<Course> c = courserepo.findById(id);
                l=(T) c.get();
            }

            if("student".equals(entity)) {
                Optional<Student> a = studentrepo.findById(id);
                l = (T) a.get();
            }

            return l;
    }

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Мы можем извлечь все сущности и получить класс сущности из entityName. Когда у нас есть класс, мы можем использовать метод find из EntityManager, чтобы получить конкретную запись по первичному идентификатору.

public static Class<?> getEntityClass(EntityManager entityManager, String entityName) {
        for (EntityType<?> entity : entityManager.getMetamodel().getEntities()) {
            if (entityName.equals(entity.getName())) {
                return entity.getJavaType();
            }
        }
        return null;
    }
0 голосов
/ 26 мая 2020

Может, стоит попробовать Spring Data REST . Это другой подход, чем ваш, но это проект Spring, который активно поддерживается и позволяет вам напрямую предоставлять ваши репозитории как конечные точки REST.

...