Как правильно разрабатывать REST API для SpringBoot? - PullRequest
0 голосов
/ 07 июня 2019

Поскольку я знаю о разработке REST-API в SpringBoot, мы разработаем API для пользователя, например

  1. Для ADD User = / v1 / users (Добавить отдельный объект в коллекцию пользователей)

  2. Для GET / UPDATE / DELETE user = / v1 / users /{userId} (для получения / обновления / удаления одного объекта из коллекции пользователей)

Теперь мы также разрабатываем API для адреса пользователя, например

  1. Для добавления адреса = / v1 / users / {userId} / address (добавление одного объекта в адреса пользователя с последующим userId)

  2. Для GET / UPDATE / DELETE = / v1 / users / {userId} / address / / addressId} (get /обновить / удалить адрес из адресов для пользователя с указанным userId)

Итак, я создал API-интерфейс, как это, но для добавления / получения / обновления / удаления яможно направлять адреса в таблицу адресов через RestController -> Сервисы-> Репозиторий -> DB

Теперь для адреса CRUD я никогда не использовал {userId}, который предоставляется в API

Пример для адреса добавления / обновления

@Override
public Address addAddress(Address address) {

    address = addressRepository.save(address);
    return address;
}

Неужели я что-то не так делаю в коде или моя концепция об отдыхе не прояснена?

Заранее спасибо.

1 Ответ

0 голосов
/ 04 июля 2019
  1. Я думаю, что сначала вы должны придумать структуру отношений между пользователем и адресом.
  2. Как и АДРЕС НЕ МОЖЕТ БЫТЬ БЕЗ ПОЛЬЗОВАТЕЛЯ и ПОЛЬЗОВАТЕЛЬ МОЖЕТ ИМЕТЬ МНОГО АДРЕСОВ или МОЖЕТ ИМЕТЬ ТОЛЬКО ОДИН АДРЕС , что по сути является кардинальной частью отношений. См. Принятый ответ.
  3. Как только это будет сделано, вы получите CASCADE TYPE и USE THE HELPER , сохраните родительский элемент вместе с child. Вот хороший пример. Постараюсь загрузить код для вашего примера. Дайте мне знать об этом:)

EDIT:

@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;

    private String userName;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user", orphanRemoval = true)
    private List<Address> addresses = new ArrayList<>();

    public void addAddress(Address address) {
        addresses.add(address);
        address.setUser(this);
    }

    public void removeAddress(Address address) {
        address.setUser(null);
        this.addresses.remove(address);
    }

}
@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Address {
    private Long id;

    private String address;

    @ManyToOne
    private User user;
}
public class Service 
{
   @PostMapping(value="/saveAddressForUser")
   public void saveAddressForUser(@RequestBody AddressForUser address)
   {
       User user=getUserFromDatabase(userId);
       user.addAddress(address);
       Repository.persist(user);//it will also persist address as cascade type is all.
   }
}
...