Springboot — не удалось оценить десериализацию Джексона для типаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Springboot — не удалось оценить десериализацию Джексона для типа

Сообщение Anonymous »

У меня возникли проблемы с API с двумя отношениями.
Модель — coche

Код: Выделить всё

@Data
@Entity
@Table(name = "coches")
public class Coche {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(unique = true)
private String matricula;

private String modelo;

private String color;

private boolean reservado=false;

@Enumerated(EnumType.STRING)
private NivelGasolina nivelGasolina;

@OneToMany(mappedBy = "coche")
@JsonBackReference
private List bookings;

public Long getId() {
return id;
}

}
Модель – Бронирование

Код: Выделить всё

@Data
@Entity
@Table(name = "booking")

public class Booking {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(unique = true)
private Integer roomNumber;

// Serializa las fechas en el formato "día/mes/año"
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private LocalDate fechaInicio;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private LocalDate fechaFin;

@ManyToOne
@JoinColumn(name = "coche_id" /* , nullable = false*/)
@JsonManagedReference
private Coche coche;
}

Контроллер — бронирование

Код: Выделить всё

@RestController
@RequestMapping("/api/booking")
@RequiredArgsConstructor

public class BookingController {

private final BookingService bookingService;

@GetMapping
public ResponseEntity obteinAllBookings() {
return ResponseEntity.ok(bookingService.obteinallBookings());
}

@PostMapping
public ResponseEntity createNewBooking(@RequestBody Booking booking) {

try {
Booking createdBooking = bookingService.newBooking(booking);
return ResponseEntity.status(HttpStatus.CREATED).body(createdBooking);
} catch (Exception e) {
System.out.println("Error al crear la reserva : ---->> " + e.getMessage()); // Imprime el mensaje de error en la consola
e.printStackTrace(); // Imprime el stack trace del error
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
}
Сервис – Бронирование

Код: Выделить всё

public class BookingService {
private final BookingRepository bookingRepository;
private final CocheRepository cocheRepository;

public List obteinallBookings() {
return bookingRepository.findAll();
}

public Booking newBooking(Booking booking) {
if (booking.getCoche() != null && booking.getCoche().getId() != null) {
Coche cocheExistente = cocheRepository.findById(booking.getCoche().getId())
.orElseThrow(() -> new RuntimeException("Coche no encontrado"));
booking.setCoche(cocheExistente);
cocheExistente.setReservado(true);
}
return bookingRepository.save(booking);
}

public Booking updateBooking(Long id, Booking booking) {
Booking existBooking = bookingRepository.findById(id)
.orElseThrow(() -> new RuntimeException("Booking no encontrado"));

existBooking.setFechaInicio(booking.getFechaInicio());
existBooking.setFechaFin(booking.getFechaFin());
return bookingRepository.save(existBooking);
}

public void deteleBooking(Long id) {
bookingRepository.deleteById(id);
}
}
Проблемы:
'coches' отлично работает с почтальоном, я могу получить/обновить/удалить, у меня были некоторые данные в данных. sql, несколько автомобилей и 1 бронирование.
Когда я пытаюсь GET при бронировании, API работает нормально, я получаю следующее;

Код: Выделить всё

    {
"id": 1,
"roomNumber": 101,
"fechaInicio": "01-10-2023",
"fechaFin": "05-10-2023",
"coche": {
"id": 1,
"matricula": "1234ABC",
"modelo": "Toyota Corolla",
"color": "#808080",
"reservado": true,
"nivelGasolina": "LLENO"
}
}
]
Но если я попытаюсь отправить POST при бронировании с этим JSON;

Код: Выделить всё

{
"roomNumber": 182,
"fechaInicio": "2023-10-05",
"fechaFin": "2023-10-08",
"coche": {
"id": 4
}
}
Я получаю эту ошибку;

Код: Выделить всё

2024-12-16T16:58:18.664Z  WARN 17972 --- [LucasRent] [nio-8080-exec-3] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate Jackson deserialization for type [[simple type, class com.lucas.fuel.LucasRent.model.Booking]]

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (`java.util.List`) not compatible with managed type (com.lucas.fuel.LucasRent.model.Booking)
Я не знаю, в чем проблема, на почтальоне я попробовал заголовок -> тип контента -> application/json, но это все равно не работает..
Я много пробовал, так как типы используют json в коде...

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-for-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»