Как я могу обработать разные ответы в REST? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть 2 лица. Но мой тип ответа не соответствует сущностям.

@Entity
@Table(name="customer")
public class Customer {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;

private String firstname;
private String lastname;
private boolean available;

@OneToMany(cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
@JoinColumn(name="customer_id")
private List<Product> products;


public Customer() {
    // TODO Auto-generated constructor stub
}


public Customer(String firstname, String lastname, boolean available) {
    super();
    this.firstname = firstname;
    this.lastname = lastname;
    this.available = available;
}


public String getFirstname() {
    return firstname;
}


public void setFirstname(String firstname) {
    this.firstname = firstname;
}


public String getLastname() {
    return lastname;
}


public void setLastname(String lastname) {
    this.lastname = lastname;
}


public boolean isAvailable() {
    return available;
}

public void setAvailable(boolean available) {
    this.available = available;
}

public List<Product> getProducts() {
    return products;
}

public void addProduct(Product product) {
if(products==null)
    products=new LinkedList<Product>();
    products.add(product);
}


@Override
public String toString() {
    return "Customer [id=" + id + ", firstname=" + firstname + ", lastname=" + lastname
            + ", available=" + available + "]";
}

}

[GET] localhost: 8080 / myapp / Customers / {id} Здесь я хочу взять все данные клиентов (идентификатор, имя, фамилия, доступные, продукты)

{
"id" : 1,
"name" : "John",
"lastname" : "Doe",
"available" : false
"products" : {...}
}

[GET] localhost: 8080 / myapp / клиентов Но здесь я хочу взять с клиентами некоторые данные (просто идентификатор, имя, фамилия)

[{
"id" : 1,
"name" : "John",
"lastname" : "Doe",
},
{
"id" : 2,
"name" : "Alex",
"lastname" : "Adams",
}]

Должен ли я создавать новые классы для каждого ответа? или редактировать данные JSON в контроллере?

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Вы можете использовать один ответ DTO.Пример:

Тип ответа может быть CustomerDTO

[GET] localhost:8080/myapp/customers/{id}

И тип ответа ниже API может быть List<CustomerDTO>

[GET] localhost:8080/myapp/customers
0 голосов
/ 07 июня 2019

Вы должны разделить:

  • Объекты используются для операций с базой данных

  • DTO используются для связи с другими службами

Итак, в вашем случае я предлагаю вам создать DTO для решения этой ситуации.Обратите внимание, что существует много библиотек, которые облегчают преобразование между DTO и сущностями, например ModelMapper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...