I am having an issue with my API that I am not finding the solution.
My entities Housing
// imports...
@Entity
public class Housing implements Serializable {
private static final Long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String title;
@Column(columnDefinition = "TEXT")
private String description;
private Double rating;
private Double dailyCost;
private String address;
private int capacity;
@OneToMany
// @JoinColumn(name = "booking_id")
private HashSet<Booking> bookings = new HashSet<>();
@ManyToOne
private Category category;
// to implement "facilities"
//@OneToMany
//private Facility facilities = new HashSet<>();
public Housing() {
}
public Housing(Long id, String name, String title, String description, Double rating, Double dailyCost, String address, int capacity, HashSet<Booking> bookings, Category category) {
this.id = id;
this.name = name;
this.title = title;
this.description = description;
this.rating = rating;
this.dailyCost = dailyCost;
this.address = address;
this.capacity = capacity;
this.bookings = bookings;
this.category = category;
}
//autogenerated getters and setters...
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Housing housing = (Housing) o;
return Objects.equals(id, housing.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
Booking
// imports...
@Entity
public class Booking implements Serializable {
private final static Long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String status;
@OneToOne
// @JoinColumn(name = "housing_id")
private Housing housing;
private LocalDate checkIn;
private LocalDate checkOut;
private int numberOfGuests;
@ManyToOne
// @JoinColumn(name = "client_id")
private Client client;
//autogenerated getters and setters...
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Booking booking = (Booking) o;
return Objects.equals(id, booking.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
I also have a DTO layer, so...
HousingDTO
// imports...
public class HousingDTO implements Serializable {
private static final Long serialVersionUID = 1L;
private Long id;
//Name of the Hotel, Apartment, etc.
private String name;
// Title of the housing, example: King Room, Double Suite, Door 245, etc.
private String title;
private String description;
private Double rating;
private Double dailyCost;
private String address;
private int capacity;
private HashSet<BookingDTO> bookings = new HashSet<>();
public HousingDTO() {
}
public HousingDTO(Long id, String name, String title, String description, Double rating, Double dailyCost, String address, int capacity, HashSet<BookingDTO> bookings) {
this.id = id;
this.name = name;
this.title = title;
this.description = description;
this.rating = rating;
this.dailyCost = dailyCost;
this.address = address;
this.capacity = capacity;
this.bookings = bookings;
}
public HousingDTO(Housing housing) {
id = housing.getId();
name = housing.getName();
title = housing.getTitle();
description = housing.getDescription();
rating = housing.getRating();
dailyCost = housing.getDailyCost();
address = housing.getAddress();
capacity = housing.getCapacity();
housing.getBookings().forEach(booking -> this.bookings.add(new BookingDTO (booking)));
}
//autogenerated getters and setters...
}
BookingDTO
// imports...
public class BookingDTO implements Serializable {
private static final Long serialVersionUID = 1L;
private Long id;
private String status;
private Housing housing;
private LocalDate checkIn;
private LocalDate checkOut;
private int numberOfGuests;
private Client client;
//autogenerated getters and setters...
public BookingDTO() {
}
public BookingDTO(Long id, String status, Housing housing, LocalDate checkIn, LocalDate checkOut, int numberOfGuests, Client client) {
this.id = id;
this.status = status;
this.housing = housing;
this.checkIn = checkIn;
this.checkOut = checkOut;
this.numberOfGuests = numberOfGuests;
this.client = client;
}
public BookingDTO(Booking booking) {
id = booking.getId();
status = booking.getStatus();
housing = booking.getHousing();
checkIn = booking.getCheckIn();
checkOut = booking.getCheckOut();
numberOfGuests = booking.getNumberOfGuests();
client = booking.getClient();
}
}
Services
HousingService
// imports...
@Service
public class HousingService {
@Autowired
private HousingRepository repository;
@Autowired
private BookingRepository bookingRepository;
@Transactional(readOnly = true)
public List<HousingDTO> findAllHousings() {
List<Housing> list = repository.findAll();
return list.stream().map(housing -> new ModelMapper().map(housing,HousingDTO.class)).collect(Collectors.toList());
}
@Transactional(readOnly = true)
public Optional<HousingDTO> findHousingById(Long id) {
// Obtaining Housing Optional by its ID.
Optional<Housing> housing = repository.findById(id);
// If it couldn't find, throw an Exception
if (housing.isEmpty()) {
throw new ResourceNotFoundException("Housing ID " + id + " could not be found.");
}
// Convert the found Optional into a DTO.
HousingDTO dto = new ModelMapper().map(housing.get(), HousingDTO.class);
// Creating and returning an Optional of DTO.
return Optional.of(dto);
}
public HousingDTO addHousing (HousingDTO housingDto) {
Housing housing = new ModelMapper().map(housingDto, Housing.class);
repository.save(housing);
return new HousingDTO(housing);
}
public void removeHousing (Long id) {
if (findHousingById(id).isEmpty()) {
throw new ResourceNotFoundException("Housing ID " + id + " not found");
}
repository.deleteById(id);
}
public HousingDTO updateHousing (Long id, HousingDTO housingDto) {
if (findHousingById(id).isEmpty()) {
throw new ResourceNotFoundException("Housing ID " + id + " not found");
}
housingDto.setId(id);
Housing housing = new ModelMapper().map(housingDto, Housing.class);
housing = repository.save(housing);
return new HousingDTO(housing);
}
}
BookingService
// imports...
@Service
public class BookingService {
@Autowired
private BookingRepository repository;
@Transactional(readOnly = true)
public List<BookingDTO> findAllBookings() {
List<Booking> list = repository.findAll();
return list.stream().map(booking -> new ModelMapper().map(booking,BookingDTO.class)).collect(Collectors.toList());
}
@Transactional(readOnly = true)
public Optional<BookingDTO> findBookingById(Long id) {
// Obtaining Booking Optional by its ID.
Optional<Booking> booking = repository.findById(id);
// If it couldn't find, throw an Exception
if (booking.isEmpty()) {
throw new ResourceNotFoundException("Booking ID " + id + " could not be found.");
}
// Convert the found Optional into a DTO.
BookingDTO dto = new ModelMapper().map(booking.get(), BookingDTO.class);
// Creating and returning an Optional of DTO.
return Optional.of(dto);
}
public BookingDTO addBooking (BookingDTO bookingDto) {
Booking booking = new ModelMapper().map(bookingDto, Booking.class);
repository.save(booking);
return new BookingDTO(booking);
}
public void removeBooking (Long id) {
if (findBookingById(id).isEmpty()) {
throw new ResourceNotFoundException("Booking ID " + id + " not found");
}
repository.deleteById(id);
}
public BookingDTO updateBooking (Long id, BookingDTO bookingDto) {
if (findBookingById(id).isEmpty()) {
throw new ResourceNotFoundException("Booking ID " + id + " not found");
}
bookingDto.setId(id);
Booking booking = new ModelMapper().map(bookingDto, Booking.class);
booking = repository.save(booking);
return new BookingDTO(booking);
}
}
And controllers
BookingController
// imports...
@RestController
@CrossOrigin(origins = "http://localhost:5173")
@RequestMapping("/bookings")
public class BookingController {
@Autowired
private BookingService service;
@GetMapping
public ResponseEntity<List<BookingDTO>> getAllBookings() {
List<BookingDTO> bookings = service.findAllBookings();
return new ResponseEntity<>(bookings, HttpStatus.OK);
}
@GetMapping("/{id}")
public ResponseEntity<Optional<BookingDTO>> getBookingById (Long id) {
Optional<BookingDTO> bookingDto = service.findBookingById(id);
return new ResponseEntity<>(bookingDto, HttpStatus.OK);
}
@PostMapping
public ResponseEntity<BookingDTO> createBooking (@RequestBody BookingDTO bookingDto) {
bookingDto = service.addBooking(bookingDto);
return new ResponseEntity<>(bookingDto, HttpStatus.CREATED);
}
@DeleteMapping("/{id}")
public ResponseEntity<?> destroyBooking (@PathVariable Long id) {
service.removeBooking(id);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PutMapping("/{id}")
public ResponseEntity<BookingDTO> refreshBooking (@PathVariable Long id, @RequestBody BookingDTO bookingDto) {
bookingDto = service.updateBooking(id, bookingDto);
return new ResponseEntity<>(bookingDto, HttpStatus.OK);
}
}
HousingController
// imports...
@RestController
@CrossOrigin(origins = "http://localhost:5173")
@RequestMapping("/housing")
public class HousingController {
@Autowired
private HousingService service;
@GetMapping
public ResponseEntity<List<HousingDTO>> getAllHousings() {
List<HousingDTO> housings = service.findAllHousings();
return new ResponseEntity<>(housings, HttpStatus.OK);
}
@GetMapping("/{id}")
public ResponseEntity<Optional<HousingDTO>> getHousingById (Long id) {
Optional<HousingDTO> housingDto = service.findHousingById(id);
return new ResponseEntity<>(housingDto, HttpStatus.OK);
}
@PostMapping
public ResponseEntity<HousingDTO> createHousing (@RequestBody HousingDTO housingDto) {
housingDto = service.addHousing(housingDto);
return new ResponseEntity<>(housingDto, HttpStatus.CREATED);
}
@DeleteMapping("/{id}")
public ResponseEntity<?> destroyHousing (@PathVariable Long id) {
service.removeHousing(id);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PutMapping("/{id}")
public ResponseEntity<HousingDTO> refreshHousing (@PathVariable Long id, @RequestBody HousingDTO housingDto) {
housingDto = service.updateHousing(id, housingDto);
return new ResponseEntity<>(housingDto, HttpStatus.OK);
}
}
The error I am getting occurs when trying to fetch all housings with Postman
Hibernate: select h1_0.id,h1_0.address,h1_0.capacity,h1_0.category_id,h1_0.daily_cost,h1_0.description,h1_0.name,h1_0.rating,h1_0.title from housing h1_0
Hibernate: select c1_0.id,c1_0.name from category c1_0 where c1_0.id=?
2023-08-22T17:46:00.165+01:00 ERROR 19948 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.orm.jpa.JpaSystemException: Could not set value of type [org.hibernate.collection.spi.PersistentSet] : `br.com.bookinghubgodoynetworks.api.model.Housing.bookings` (setter)] with root cause
java.lang.IllegalArgumentException: Can not set java.util.HashSet field br.com.bookinghubgodoynetworks.api.model.Housing.bookings to org.hibernate.collection.spi.PersistentSet
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) ~[na:na]
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:na]
at java.base/jdk.internal.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) ~[na:na]
at java.base/java.lang.reflect.Field.set(Field.java:799) ~[na:na]
at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:55) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4187) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.graph.entity.AbstractEntityInitializer.initializeEntityInstance(AbstractEntityInitializer.java:844) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.graph.entity.AbstractEntityInitializer.initializeEntity(AbstractEntityInitializer.java:804) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.graph.entity.AbstractEntityInitializer.initializeInstance(AbstractEntityInitializer.java:790) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.internal.InitializersList.initializeInstance(InitializersList.java:70) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.internal.StandardRowReader.coordinateInitializers(StandardRowReader.java:111) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:87) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:199) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:361) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:168) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:93) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0(ConcreteSqmSelectQueryPlan.java:110) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:303) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:244) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:518) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:367) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.Query.getResultList(Query.java:119) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:382) ~[spring-data-jpa-3.1.1.jar:3.1.1]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:95) ~[spring-data-jpa-3.1.1.jar:3.1.1]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:288) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:136) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:120) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:72) ~[spring-data-commons-3.1.1.jar:3.1.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:391) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:164) ~[spring-data-jpa-3.1.1.jar:3.1.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:244) ~[spring-aop-6.0.10.jar:6.0.10]
at jdk.proxy4/jdk.proxy4.$Proxy122.findAll(Unknown Source) ~[na:na]
at br.com.bookinghubgodoynetworks.api.service.HousingService.findAllHousings(HousingService.java:28) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:756) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:391) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:756) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-6.0.10.jar:6.0.10]
at br.com.bookinghubgodoynetworks.api.service.HousingService$$SpringCGLIB$$0.findAllHousings(<generated>) ~[classes/:na]
at br.com.bookinghubgodoynetworks.api.controller.HousingController.getAllHousings(HousingController.java:24) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) ~[spring-web-6.0.10.jar:6.0.10]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) ~[spring-web-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.10.jar:6.0.10]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.10.jar:6.0]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.10.jar:6.0.10]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.10.jar:6.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.10.jar:10.1.10]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.10.jar:6.0.10]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.10.jar:6.0.10]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.10.jar:6.0.10]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.10.jar:6.0.10]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.10.jar:6.0.10]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.10.jar:6.0.10]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) ~[tomcat-embed-core-10.1.10.jar:10.1.10]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-
...........
I don't know what to do, I am guessing that it might be due to the modelmapper(?)