Проблемы с spring data jdbc я полагаю
Всё перепробовал, не понимаю с чем связана ошибка
Вот исходники https://github.com/swarm157/diplomny
Изменено, ошибка происходит при вызове /api/register после кода класса MyController метода register, судя по логам прямо после самого метода, но перед возвратом значения клиенту
Попробовал вообще убрать avatar по совету одного из комментаторов, эффекта не дало, класса Lob вообще в проекте нету.
Вот ошибка, дополнил логами
2025-05-24T18:48:14.555+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.model.TestController : register user:
name=Юра, lastName=Курбатов, [email protected], description=Тестер,
password=123123
2025-05-24T18:48:14.648+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.model.TestController : done registration
2025-05-24T18:48:14.682+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.model.TestController : done generating
test users
2025-05-24T18:48:14.695+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : registered user
done
2025-05-24T18:48:14.695+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : setting attribute
2025-05-24T18:48:14.696+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : session attribute
has been set
2025-05-24T18:48:14.696+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : user exists
2025-05-24T18:48:14.696+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : checking attribute
pointer
2025-05-24T18:48:14.714+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : setting attribute
user
2025-05-24T18:48:14.715+04:00 INFO 6312 --- [diplomny] [nio-8080-
exec-1] r.n.diplomny.controller.MyController : registered user
done
2025-05-24T18:48:14.757+04:00 ERROR 6312 --- [diplomny] [nio-8080-
exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service()
for servlet [dispatcherServlet] in context with path [] threw
exception
2025-05-23T14:23:01.183+04:00 ERROR 13336 --- [diplomny] [nio-8080-
exec-1] o.a.c.c.C.[Tomcat].[localhost] : Exception
Processing [ErrorPage[errorCode=0, location=/error]]
org.springframework.core.convert.ConversionFailedException: Failed
to convert from type [java.lang.Object] to type [byte[]] for value
[ru.nightmare.diplomny.entity.User@42c04b7c]
at
org.springframework.core.convert.support.ConversionUtils.invokeConvert
er(ConversionUtils.java:47) ~[spring-core-6.2.2.jar:6.2.2]
at org.springframework.core.convert.support.GenericConversionService.conv
ert(GenericConversionService.java:182) ~[spring-core-6.2.2.jar:6.2.2]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.serializ
e(JdbcIndexedSessionRepository.java:684) ~[spring-session-jdbc-
3.4.1.jar:3.4.1]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.lambda$i
nsertSessionAttributes$5(JdbcIndexedSessionRepository.java:569) ~
[spring-session-jdbc-3.4.1.jar:3.4.1]
at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplat
e.java:975) ~[spring-jdbc-6.2.2.jar:6.2.2]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:6
58) ~[spring-jdbc-6.2.2.jar:6.2.2]
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:97
2) ~[spring-jdbc-6.2.2.jar:6.2.2]
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:10
16) ~[spring-jdbc-6.2.2.jar:6.2.2]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.insertSe
ssionAttributes(JdbcIndexedSessionRepository.java:565) ~[spring-
session-jdbc-3.4.1.jar:3.4.1]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository$JdbcSess
ion.lambda$save$11(JdbcIndexedSessionRepository.java:930) ~[spring-
session-jdbc-3.4.1.jar:3.4.1]
at org.springframework.transaction.support.TransactionOperations.lambda$e
xecuteWithoutResult$0(TransactionOperations.java:68) ~[spring-tx-
6.2.2.jar:6.2.2]
at org.springframework.transaction.support.TransactionTemplate.execute(Tr
ansactionTemplate.java:140) ~[spring-tx-6.2.2.jar:6.2.2]
at org.springframework.transaction.support.TransactionOperations.executeW
ithoutResult(TransactionOperations.java:67) ~[spring-tx-
6.2.2.jar:6.2.2]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository$JdbcSess
ion.save(JdbcIndexedSessionRepository.java:910) ~[spring-session-jdbc-
3.4.1.jar:3.4.1]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.save(Jdb
cIndexedSessionRepository.java:477) ~[spring-session-jdbc-
3.4.1.jar:3.4.1]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.save(Jdb
cIndexedSessionRepository.java:141) ~[spring-session-jdbc-
3.4.1.jar:3.4.1]
at org.springframework.session.web.http.SessionRepositoryFilter$SessionRe
positoryRequestWrapper.commitSession(SessionRepositoryFilter.java:229)
~[spring-session-core-3.4.1.jar:3.4.1]
at org.springframework.session.web.http.SessionRepositoryFilter.doFilterI
nternal(SessionRepositoryFilter.java:145) ~[spring-session-core-
3.4.1.jar:3.4.1]
at org.springframework.session.web.http.OncePerRequestFilter.doFilter(Onc
ePerRequestFilter.java:82) ~[spring-session-core-3.4.1.jar:3.4.1]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(De
legatingFilterProxy.java:362) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(Delegati
ngFilterProxy.java:278) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
cationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
lterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
questFilter.java:101) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
cationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
lterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
tcher.java:633) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicat
ionDispatcher.java:411) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
spatcher.java:331) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
atcher.java:268) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.ja
va:380) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.ja
va:208) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve
.java:285) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
va:149) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
va:93) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
e.java:74) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
:344) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:
397) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLigh
t.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractP
rotocol.java:905) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoi
nt.java:1741) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase
.java:52) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPool
Executor.java:1190) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoo
lExecutor.java:659) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThr
ead.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
at java.base/java.lang.Thread.run(Thread.java:1575) ~[na:na]
Caused by: org.springframework.core.serializer.support.SerializationFailedExcepti
on: Failed to serialize object using DefaultSerializer
at org.springframework.core.serializer.support.SerializingConverter.conve
rt(SerializingConverter.java:64) ~[spring-core-6.2.2.jar:6.2.2]
at org.springframework.core.serializer.support.SerializingConverter.conve
rt(SerializingConverter.java:33) ~[spring-core-6.2.2.jar:6.2.2]
at org.springframework.core.convert.support.GenericConversionService$Conv
erterAdapter.convert(GenericConversionService.java:358) ~[spring-core-
6.2.2.jar:6.2.2]
at org.springframework.core.convert.support.ConversionUtils.invokeConvert
er(ConversionUtils.java:41) ~[spring-core-6.2.2.jar:6.2.2]
... 45 common frames omitted
Caused by: java.lang.IllegalArgumentException: DefaultSerializer
requires a Serializable payload but received an object of type
[ru.nightmare.diplomny.entity.User]
at org.springframework.core.serializer.DefaultSerializer.serialize(Defaul
tSerializer.java:43) ~[spring-core-6.2.2.jar:6.2.2]
at org.springframework.core.serializer.Serializer.serializeToByteArray(Se
rializer.java:56) ~[spring-core-6.2.2.jar:6.2.2]
at org.springframework.core.serializer.support.SerializingConverter.conve
rt(SerializingConverter.java:60) ~[spring-core-6.2.2.jar:6.2.2]
... 48 common frames omitted
Ответы (1 шт):
Сначала надо понять где возникает проблема, а она в вашем репозитории. Когда вы выбираете только некоторые поля, Spring Boot не может преобразовать их в ваш объект User.
Есть 2 способа исправить это:
- Измените тип возвращаемого значения на
List<Object[]>.@Query("SELECT u.id, u.email, u.firstname, u.lastname FROM User u") List<Object[]> findByQuery();
Затем, вам придется выполнить сопоставление самостоятельно.
- Измените запрос
@Query("SELECT new User(u.id, u.email, u.firstname, u.lastname) FROM User u") List<User> findByQuery();
Просто убедитесь, что в вашей модели User есть соответствующий конструктор. Как я вижу, он у вас уже есть.
На мой взгляд, это более элегантный подход.