[英]Json and Array serialization - Java Spring Boot
我试图插入没有成功的电话列表。
我的域客户端类
@Entity
public class Client {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integir id;
private String name;
@JsonManagedReference
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(****)
private List<Phone> phones = new ArrayList<>();
**gets and sets**
public Client (String name){
this.name = name;
}
}
我的域电话课程
@Entity
public class Phone {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integir id;
private String number;
@JsonBackReference
@ManyToMany(mappedBy = "phones")
private List<Client> clients = ArrayList<>();
**gets and sets**
public Phone(String number) {
this.number = number;
}
}
我有一个DTO客户
public class ClientDTO {
private String name;
private String number;
private List<Phone> numbers = ArryList<>();
**gets and sets**
}
我的服务ClientService具有以下方法:
public Client fromDTO (ClientDTO clientDTO) {
Client c = new Client(clientDTO.getName());
for(Phone p: clientDTO.getNumbers()) {
p.setNumber(x.getNumber);
p.getClients().addALL(Arrys.asList(c));
c.getPhones().addAll(Arrys.asList(p));
}
}
如果我在邮递员中尝试这样做:
{
"name" : "Teste",
"numbers":
[
{ "number" : "xxxxxx"},
{ "number" : "yyyyyyy"}
]
}
显示错误415:不支持的媒体类型
如果我将ClientDTO更改为:
public class ClientDTO {
private String name;
private String number;
**gets and sets**
}
我在ClientService中的方法可以:
public Client fromDTO (ClientDTO clientDTO) {
Client c = new Client(clientDTO.getName());
Phone p = new Phone(clientDTO.getPhone());
p.getClients().addAll(Arrys.asList(c));
c.getPhones().addAll(Arrays.asList(p));
}
然后在我的邮递员中发送:
{
"name" : "Teste",
"number": "xxxxx"
}
工作正常。
我在做什么错?
向Client和Phone实体类添加一个空的(无参数)构造函数
客户实体类别
@Entity
public class Client {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integir id;
private String name;
@JsonManagedReference
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(****)
private List<Phone> phones = new ArrayList<>();
**gets and sets**
public Client (){}
public Client (String name){
this.name = name;
}
}
电话实体类别
@Entity
public class Phone {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integir id;
private String number;
@JsonBackReference
@ManyToMany(mappedBy = "phones")
private List<Client> clients = ArrayList<>();
**gets and sets**
public Phone() {}
public Phone(String number) {
this.number = number;
}
}
如果对象没有Serializable超类且没有no-arg构造函数,则不能序列化该对象。 由于您在ClientDTO中使用了Phone实体类,并且没有no-arg构造函数,因此序列化过程失败
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.