Не удается обработать управляемую/обратную ссылку 'defaultReference': тип обратной ссылки (java.util.List) несовместим с управляемым типом

Я начал разработку Springboot REST API для грубых операций, и мне удалось завершить часть извлечения данных, однако у меня возникли проблемы с запросом POST.

У меня есть объект под названием Job

@Entity
@Table(name="JOB")
public class Job {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="JOB_ID")
private Long jobId;

@Column(name="JOB_CODE")
private String jobCode;

@Column(name="JOB_DESCRIPTION")
private String jobDescription;

@OneToMany(mappedBy="job")
@JsonManagedReference(value="tasks")
private List<JobTask> taskList = new ArrayList<>();

Обратите внимание, что я использовал аннотации @JsonManagedReference и @JsonBackReference, чтобы избежать ссылок на циклы.

Это мой дочерний элемент JobTask`

@Entity
@Table(name="JOB_TASK")
public class JobTask {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="JOB_TASK_ID")
private Long jobTaskId;

private String taskDescription;

@ManyToOne
@JoinColumn(name="JOB_ID")
@JsonBackReference(value="tasks")
private Job job;`

Затем я попробовал POST-запрос для создания задания с JSON ниже.

{
"jobCode": "QM",
"jobDescription": "Quaterly Maintenance",
"taskList": [
{
     "taskDescription": "Quarter Engine Asess"
 },
 {
      "taskDescription": "Quarter Break Asess"
 }
]`
}

Однако теперь я получаю исключение ниже для запросов POST`

Не удалось оценить десериализацию Джексона для типа [[простой тип, класс com.abc.entity.Job]]: java.lang.IllegalArgumentException: невозможно обработать управляемую/обратную ссылку 'defaultReference': тип обратной ссылки (java.util.List) несовместим с управляемым типом (com.abc.entity.JobTask)`

Я провел поиск на этом сайте и нашел несколько рекомендаций по использованию @JsonIdentityInfo вместо аннотаций @JsonManagedReference/ @JsonBackReference. Но я не хочу использовать @JsonIdentityInfo, поскольку он возвращает значения идентификатора вместо полностью сериализованного объекта, когда я читаю данные с помощью запросов GET.

Любая помощь будет глубоко оценена

Спасибо, Кет


person keth    schedule 11.06.2017    source источник


Ответы (1)


Я думаю, что вы должны использовать реализации Serializable следующим образом:

    @Entity
    @Table(name="JOB_TASK")
    public class JobTask implements Serializable {
    }

    @Entity
    @Table(name="JOB")
    public class Job implements Serializable {
    }

вы найдете здесь контроллер, чтобы добавить что-то, посмотрите на это, например:

 @RestController
    @RequestMapping("/pays")
    public class PaysController {
        @Autowired
        IManagerPays iManagerPays;

        @RequestMapping(method = RequestMethod.POST)
        public Pays addPays(@RequestBody Pays pays) {
            return iManagerPays.addPays( pays);
        }
    }

    @Service
    public class ManagerPays implements IManagerPays {
        @Autowired
        private RepositoryPays repositorypays;

        @Override
        public Pays addPays(Pays pays) {

            return repositorypays.save(pays);
        }
    }

    @Entity
    @Table(name="ctr_pays")
    public class Pays {
        @Id
          @GeneratedValue
        private Integer idPays;
        private String nomPays;
        @OneToMany(mappedBy="pays")
        private List<Ville> villes;
        public Pays(){

        }
    //getter and setter
    }

этот пример работает нормально.

person Med Elgarnaoui    schedule 11.06.2017
comment
привет @Mohamed Elgarnaoui, спасибо за ответ. я попробовал это и не повезло. Кстати, какова теория реализации интерфейса Serializable и функциональности Jackson De-Serialize? - person keth; 11.06.2017