Передача родительской ссылки на идентификатор при создании дочернего объекта через API REST - PullRequest
0 голосов
/ 24 января 2019

Я использую пружинную загрузку (версия - 2.1.1).У меня есть модель базы данных «один ко многим» для операций CRUD через остальные API.Модель выглядит так, как показано ниже.Как настроить POST /departments API (который создает объект отдела) для приема только идентификатора организации во входном теле json?

@PostMapping
    public Long createDepartment(@RequestBody Department Department) {
        Department d = departmentService.save(Department);
        return d.getId();
    }

Примечание. Я не хочу разрешать создание объекта организации при созданииотдел.

Отображение объекта модели

@Entity
@Table(name="ORGANIZATIONS")
public class Organization{

    @Id
    @GeneratedValue
    Private long id;

    @Column(unique=true)
    Private String name;

    @OneToMany(mappedBy = "organization", fetch = FetchType.EAGER)
    private List<Department> departments;
}


@Entity
@Table(name="DEPARTMENTS")
Public class Department{

   @Id
   @GeneratedValue
   Private long id;

   @Column(unique=true)
   Private String name;

   @ManyToOne(fetch = FetchType.EAGER)
   private Organization organization;
}

Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

Самый простой и разумный способ, на мой взгляд, это использование шаблона DTO (Data Transfer Object).

Создайте класс, представляющий модель, которую вы хотите получить в качестве ввода:

public class CreateDepartmentRequest {
    private long id;

    // getters and setters
}

Затем используйте его в своем контроллере:

@PostMapping
public Long createDepartment(@RequestBody CreateDepartmentRequest request) {
    Department d = new Department();
    d.setId(request.getId());
    Department d = departmentService.save(d);
    return d.getId();
}

Примечание: лучше ВСЕГДА возвращать JSON через REST API (если вы не используете какой-либо другой формат в своих API), так что вы также можете использовать тот же самыйшаблон, как я упоминал выше, для возврата правильной модели в результате операции POST или простой карты, если вы не хотите создавать много моделей.

...