Сериализация Json и Array - Java Spring Boot - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь вставить список телефонов безуспешно.

Мой клиентский домен класса

@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 ClientDTO

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" 
}

Работает нормально.

Что я делаю не так?

1 Ответ

0 голосов
/ 24 июня 2018

Добавление пустого конструктора (без аргументов) в классы сущностей «Клиент» и «Телефон»

Класс сущности клиента

@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 суперкласса и не имеет конструктора без аргументов.Так как вы использовали класс сущности Phone в ClientDTO, и у него нет конструктора без аргументов, процесс сериализации завершился неудачно

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