Json和数组序列化-Java Spring引导
我试图插入一个电话列表,但没有成功 我的域客户端类Json和数组序列化-Java Spring引导,java,json,hibernate,spring-boot,Java,Json,Hibernate,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<
@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;
}
}
如果我尝试在《邮递员》中这样说:
{
"name" : "Teste",
"numbers":
[
{ "number" : "xxxxxx"},
{ "number" : "yyyyyyy"}
]
}
显示错误415:不支持的媒体类型
如果我将我的客户更改为:
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"
}
很好
我做错了什么?将空(无参数)构造函数添加到客户端和电话实体类中
客户端实体类
@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;
}
}
@实体
公共类客户端{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
私有整数id;
私有字符串名称;
@JsonManagedReference
@多个(级联=级联类型.ALL)
@可接合(****)
私有列表电话=新的ArrayList();
**获取和设置**
公共客户端(){}
公共客户端(字符串名称){
this.name=名称;
}
}
电话实体类
@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;
}
}
@实体
公用电话{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
私有整数id;
私有字符串编号;
@JsonBackReference
@许多(mappedBy=“电话”)
private List clients=ArrayList();
**获取和设置**
公用电话(){}
公用电话(字符串号码){
这个数字=数字;
}
}
如果对象没有可序列化的超类且没有参数构造函数,则无法序列化该对象。因为您在ClientDTO中使用了Phone实体类,并且它没有参数构造函数,所以序列化过程失败我包含了默认构造函数,但错误仍然存在。因此,我在ClientDTO->List中添加了注释@JsonIgnore,错误结束。但不包括电话。现在呢?我做错了什么?
@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;
}
}