Существует метод PUT
, задача которого - сменить карту Customer
. Сам класс Customer
работает с @ OneToOne отношениями с классом User
(поля name
, последний name
и т. Д. c.). Все работает хорошо, метод выполняет свою задачу и с этим проблем нет. Но почему-то выдает предупреждение:
2020-04-26 14:15:14.160 WARN 5340 --- [nio-8080-exec-2] o.springframework.validation.DataBinder : Skipping URI variable 'id' because request contains bind value with same name.
Как это исправить?
Я использую Spring-MVC
+ Hibernate
+ Jpa
+ PostgreSQL
;
Пользователь класса:
package com.tinychiefdelights.model;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import javax.persistence.*;
@ApiModel
@Data
@Entity
@Table(name = "pg_user", schema = "public")
public class User {
public User() { // Пустой конструктор для Hibernate
}
public User(String name, String lastName, String role,
String login, String password) { // Базовый конструктор
this.name = name;
this.lastName = lastName;
this.role = role;
this.login = login;
this.password = password;
}
// Поля
private @Id
@GeneratedValue
Long id;
@Column(name = "login")
private String login;
@Column(name = "password")
private String password;
@Column(name = "role")
private String role;
@Column(name = "name")
private String name;
@Column(name = "last_name")
private String lastName;
}
Клиент:
package com.tinychiefdelights.model;
import com.fasterxml.jackson.annotation.*;
import lombok.Data;
import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;
import javax.persistence.*;
import java.util.List;
@Data
@Entity
@Table(name = "customer", schema = "public")
public class Customer {
public Customer() { // Пустой конструктор для Hibernate
}
// Поля
// name, lastName, login, password берем от класса User через связи;
private @Id
@GeneratedValue
Long id;
@Column(name = "wallet")
private double wallet;
//Relationships
//
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id") // Join without Customer in User class
@NotFound(action = NotFoundAction.IGNORE)
private User user;
//Лист заказов
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
@JsonIgnore // Таким образом я предотвратил рекурсию
private List<Order> orderList;
}
Сервисная служба:
public Customer editCustomer(Long id, User user, double wallet){
Customer customer = customerRepository.getByIdAndUserRole(id, "customer");
customer.setUser(user);
customer.setWallet(wallet);
return customerRepository.save(customer);
}
Контроллер клиента:
@PutMapping("/customer/{id}")
Customer editCustomer(@PathVariable Long id, User user, @RequestParam double wallet) {
return customerService.editCustomer(id, user, wallet);
}