繁体   English   中英

Json和数组序列化-Java Spring Boot

[英]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;
    }  
}

如果对象没有Seri​​alizable超类且没有no-arg构造函数,则不能序列化该对象。 由于您在ClientDTO中使用了Phone实体类,并且没有no-arg构造函数,因此序列化过程失败

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM