Создаем приложение Pastebin и не можем десериализовать объекты ⇐ JAVA
-
Гость
Создаем приложение Pastebin и не можем десериализовать объекты
Создание проекта Java (java 19) с помощью Spring Boot (3.1.3) и gradle (8.2). Также использую Google Cloud Storage и при получении данных хочу десериализовать данные в объекте с помощью SerializationUtils, но вылезает такая ошибка:
java.lang.ClassCastException: класс com.example.pastebin.entity.Paste нельзя привести к классу com.example.pastebin.entity.Paste (com.example.pastebin.entity.Paste находится в безымянном модуле загрузчика «приложения»; com.example.pastebin.entity.Paste находится в безымянном модуле загрузчика org.springframework.boot.devtools.restart.classloader.RestartClassLoader @6ed949b0) в com.example.pastebin.services.PasteService.findAll(PasteService.java:46) ~[main/:na] в com.example.pastebin.controllers.PasteController.allPastes(PasteController.java:35) ~[main/:na] в java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] в java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na] в org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.11.jar:6.0.11] в jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.12.jar:6.0] в org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.11.jar:6.0.11] в jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.12.jar:6.0] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:110) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[весна-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в java.base/java.lang.Thread.run(Thread.java:1589) ~[на:на] build.gradle:
плагины { идентификатор 'Java' идентификатор 'org.springframework.boot' версии '3.1.3' идентификатор 'io.spring.dependent-management' версии '1.1.3' } группа = 'org.example' версия = '1.0-SNAPSHOT' репозитории { mavenCentral() } конфигурации { компилироватьтолько { расширяется из аннотацииПроцессор } } зависимости { реализация 'org.springframework.boot:spring-boot-starter-data-jpa' реализация 'org.springframework.boot:spring-boot-starter-data-redis' реализация 'org.springframework.boot:spring-boot-starter-security' реализация 'org.springframework.boot:spring-boot-starter-thymeleaf' реализация 'org.springframework.boot:spring-boot-starter-web' реализация 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' compileOnly 'org.projectlombok: lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok: lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' реализация 'org.mapstruct:mapstruct:1.5.5.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' реализация 'com.google.cloud:google-cloud-storage:2.26.1' Платформа testImplementation('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' } тест { использоватьJUnitPlatform() } Вставить объект:
пакет com.example.pastebin.entity; импортировать jakarta.persistence.*; импортировать ломбок.AllArgsConstructor; импорт ломбок.Builder; импортировать ломбок.Данные; импортировать ломбок.NoArgsConstructor; импортировать java.io.Serial; импортировать java.io.Serializable; импортировать java.time.LocalDateTime; @Сущность @Данные @NoArgsConstructor @AllArgsConstructor @Builder общественный класс Paste реализует Serializable { @Serial частный статический окончательный длинный сериалVersionUID = 8591616427310310802L; @Идентификатор @GeneratedValue(стратегия = GenerationType.IDENTITY) @Column(имя = "идентификатор") частный длинный идентификатор; @Column(name = «title», nullable = false) частный заголовок строки; @Column(name = «текст», nullable = false) частный строковый текст; @Лоб частный байт[] байты; @ManyToOne (каскад = CascadeType.ALL, выборка = FetchType.EAGER) частный пользователь; частный LocalDateTime dateOfCreated; @PrePersist частная недействительная инициализация () { this.dateOfCreated = LocalDateTime.now(); } } DTO:
пакет com.example.pastebin.dto; импортировать ломбок.AllArgsConstructor; импорт ломбок.Builder; импортировать ломбок.Данные; импортировать ломбок.NoArgsConstructor; @Данные @NoArgsConstructor @AllArgsConstructor @Builder общественный класс PasteDTO { частный заголовок строки; частный строковый текст; частный автор строки; } Служба вставки:
пакет com.example.pastebin.services; импортировать com.example.pastebin.dto.PasteDTO; импортировать com.example.pastebin.entity.Paste; импортировать com.example.pastebin.entity.PasteDetails; импортировать com.example.pastebin.entity.User; импортировать com.example.pastebin.mappers.PasteMapper; импортировать com.example.pastebin.repositories.PasteDetailsRepository; импортировать com.example.pastebin.repositories.UserRepository; импортировать com.google.api.gax.paging.Page; импортировать com.google.cloud.storage.*; импортировать lombok.extern.slf4j.Slf4j; импортировать org.springframework.stereotype.Service; импортировать org.springframework.util.SerializationUtils; импортировать java.io.ByteArrayInputStream; импортировать java.util.ArrayList; импортировать java.util.List; @Услуга @Slf4j общественный класс PasteService { частное окончательное хранилище хранилища = StorageOptions.getDefaultInstance().getService(); частный окончательный сегмент Bucket = Storage.get("pastebin1"); частный конечный UserRepository userRepository; частный окончательный PasteDetailsRepository вставитьDetailsRepository; частный окончательный PasteMapper PasteMapper; public PasteService (UserRepository userRepository, PasteDetailsRepository PasteDetailsRepository, PasteMapper PasteMapper) { this.userRepository = userRepository; this.pasteDetailsRepository =pasteDetailsRepository; this.pasteMapper = PasteMapper; } общественный список findAll() { List вставляет = новый ArrayList(); Page blobs = Bucket.list(); for (Blob blob: blobs.getValues()) { byte[] байты = blob.getContent(); if (SerializationUtils.deserialize(bytes) == null) { throw new IllegalArgumentException("Байт[] не должен быть нулевым"); } здесь ошибка -> Pastes.add(pasteMapper.fromPasteToDTO((Вставить) SerializationUtils.deserialize(bytes))); } возвратные пасты; } public void ConnectUserToPaste (Имя пользователя String, Paste Paste) { Пользователь пользователя = userRepository.findByUsername(имя пользователя); если (пользователь == ноль) { выдать новое RuntimeException("Пользователь не найден"); } еще { вставить.setUser(пользователь); user.getPastes().add(вставить); } } public void saveText(PasteDTO PasteDTO, String username) { Вставить вставить = Paste.builder() .title(pasteDTO.getTitle()) .text(pasteDTO.getText()) .строить(); this.connectUserToPaste(имя пользователя, вставить); BlobId blobId = BlobId.of("pastebin1", "paste_" + пасты.getId()); BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build(); Blob blob = Storage.create(blobInfo, SerializationUtils.serialize(paste)); PasteDetails PasteDetails = PasteDetails.builder() .blobId(blobId) .bucket(blob.getBucket()) .строить(); PasteDetailsRepository.save(pasteDetails); log.info("Сохранение новой корзины с заголовком: {}", Paste.getTitle()); } public PasteDTO findPasteByTitle (заголовок строки) { Page blobs = Bucket.list(); for (Blob blob: blobs.getValues()) { если (title.equals(blob.getName())) { PasteDTO пастыDTO = пастыMapper.fromPasteToDTO((Вставить) SerializationUtils.deserialize(blob.getContent())); } } вернуть ноль; } } И вставьте контроллер:
пакет com.example.pastebin.controllers; импортировать com.example.pastebin.dto.PasteDTO; импортировать com.example.pastebin.mappers.PasteMapper; импортировать com.example.pastebin.repositories.PasteDetailsRepository; импортировать com.example.pastebin.services.PasteService; импортировать org.springframework.stereotype.Controller; импортировать org.springframework.ui.Model; импортировать org.springframework.web.bind.annotation.GetMapping; импортировать org.springframework.web.bind.annotation.PostMapping; импортировать java.security.Principal; @Контроллер общественный класс PasteController { частный окончательный PasteService PasteService; общественный PasteController (PasteService пастыService) { this.pasteService = PasteService; } @GetMapping("/add_paste") публичная строка addBinPage() { вернуться домой"; } @PostMapping("/add_paste") public String addBin(PasteDTO PasteDTO, Главный принципал) { PasteService.saveText(pasteDTO, Principal.getName()); вернуть «перенаправление:/вставки»; } @GetMapping("вставляет") public String allPastes (модель модели) { model.addAttribute("pastes",pasteService.findAll()); вернуть «пасты»; } } Будем благодарны за любую помощь. Спасибо.
Создание проекта Java (java 19) с помощью Spring Boot (3.1.3) и gradle (8.2). Также использую Google Cloud Storage и при получении данных хочу десериализовать данные в объекте с помощью SerializationUtils, но вылезает такая ошибка:
java.lang.ClassCastException: класс com.example.pastebin.entity.Paste нельзя привести к классу com.example.pastebin.entity.Paste (com.example.pastebin.entity.Paste находится в безымянном модуле загрузчика «приложения»; com.example.pastebin.entity.Paste находится в безымянном модуле загрузчика org.springframework.boot.devtools.restart.classloader.RestartClassLoader @6ed949b0) в com.example.pastebin.services.PasteService.findAll(PasteService.java:46) ~[main/:na] в com.example.pastebin.controllers.PasteController.allPastes(PasteController.java:35) ~[main/:na] в java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] в java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na] в org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.11.jar:6.0.11] в org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.11.jar:6.0.11] в jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.12.jar:6.0] в org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.11.jar:6.0.11] в jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.12.jar:6.0] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:110) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.1.3.jar:6.1.3] в org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[весна-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.11.jar:6.0.11] в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.11.jar:6.0.11] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.12.jar:10.1.12] в java.base/java.lang.Thread.run(Thread.java:1589) ~[на:на] build.gradle:
плагины { идентификатор 'Java' идентификатор 'org.springframework.boot' версии '3.1.3' идентификатор 'io.spring.dependent-management' версии '1.1.3' } группа = 'org.example' версия = '1.0-SNAPSHOT' репозитории { mavenCentral() } конфигурации { компилироватьтолько { расширяется из аннотацииПроцессор } } зависимости { реализация 'org.springframework.boot:spring-boot-starter-data-jpa' реализация 'org.springframework.boot:spring-boot-starter-data-redis' реализация 'org.springframework.boot:spring-boot-starter-security' реализация 'org.springframework.boot:spring-boot-starter-thymeleaf' реализация 'org.springframework.boot:spring-boot-starter-web' реализация 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' compileOnly 'org.projectlombok: lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok: lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' реализация 'org.mapstruct:mapstruct:1.5.5.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' реализация 'com.google.cloud:google-cloud-storage:2.26.1' Платформа testImplementation('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' } тест { использоватьJUnitPlatform() } Вставить объект:
пакет com.example.pastebin.entity; импортировать jakarta.persistence.*; импортировать ломбок.AllArgsConstructor; импорт ломбок.Builder; импортировать ломбок.Данные; импортировать ломбок.NoArgsConstructor; импортировать java.io.Serial; импортировать java.io.Serializable; импортировать java.time.LocalDateTime; @Сущность @Данные @NoArgsConstructor @AllArgsConstructor @Builder общественный класс Paste реализует Serializable { @Serial частный статический окончательный длинный сериалVersionUID = 8591616427310310802L; @Идентификатор @GeneratedValue(стратегия = GenerationType.IDENTITY) @Column(имя = "идентификатор") частный длинный идентификатор; @Column(name = «title», nullable = false) частный заголовок строки; @Column(name = «текст», nullable = false) частный строковый текст; @Лоб частный байт[] байты; @ManyToOne (каскад = CascadeType.ALL, выборка = FetchType.EAGER) частный пользователь; частный LocalDateTime dateOfCreated; @PrePersist частная недействительная инициализация () { this.dateOfCreated = LocalDateTime.now(); } } DTO:
пакет com.example.pastebin.dto; импортировать ломбок.AllArgsConstructor; импорт ломбок.Builder; импортировать ломбок.Данные; импортировать ломбок.NoArgsConstructor; @Данные @NoArgsConstructor @AllArgsConstructor @Builder общественный класс PasteDTO { частный заголовок строки; частный строковый текст; частный автор строки; } Служба вставки:
пакет com.example.pastebin.services; импортировать com.example.pastebin.dto.PasteDTO; импортировать com.example.pastebin.entity.Paste; импортировать com.example.pastebin.entity.PasteDetails; импортировать com.example.pastebin.entity.User; импортировать com.example.pastebin.mappers.PasteMapper; импортировать com.example.pastebin.repositories.PasteDetailsRepository; импортировать com.example.pastebin.repositories.UserRepository; импортировать com.google.api.gax.paging.Page; импортировать com.google.cloud.storage.*; импортировать lombok.extern.slf4j.Slf4j; импортировать org.springframework.stereotype.Service; импортировать org.springframework.util.SerializationUtils; импортировать java.io.ByteArrayInputStream; импортировать java.util.ArrayList; импортировать java.util.List; @Услуга @Slf4j общественный класс PasteService { частное окончательное хранилище хранилища = StorageOptions.getDefaultInstance().getService(); частный окончательный сегмент Bucket = Storage.get("pastebin1"); частный конечный UserRepository userRepository; частный окончательный PasteDetailsRepository вставитьDetailsRepository; частный окончательный PasteMapper PasteMapper; public PasteService (UserRepository userRepository, PasteDetailsRepository PasteDetailsRepository, PasteMapper PasteMapper) { this.userRepository = userRepository; this.pasteDetailsRepository =pasteDetailsRepository; this.pasteMapper = PasteMapper; } общественный список findAll() { List вставляет = новый ArrayList(); Page blobs = Bucket.list(); for (Blob blob: blobs.getValues()) { byte[] байты = blob.getContent(); if (SerializationUtils.deserialize(bytes) == null) { throw new IllegalArgumentException("Байт[] не должен быть нулевым"); } здесь ошибка -> Pastes.add(pasteMapper.fromPasteToDTO((Вставить) SerializationUtils.deserialize(bytes))); } возвратные пасты; } public void ConnectUserToPaste (Имя пользователя String, Paste Paste) { Пользователь пользователя = userRepository.findByUsername(имя пользователя); если (пользователь == ноль) { выдать новое RuntimeException("Пользователь не найден"); } еще { вставить.setUser(пользователь); user.getPastes().add(вставить); } } public void saveText(PasteDTO PasteDTO, String username) { Вставить вставить = Paste.builder() .title(pasteDTO.getTitle()) .text(pasteDTO.getText()) .строить(); this.connectUserToPaste(имя пользователя, вставить); BlobId blobId = BlobId.of("pastebin1", "paste_" + пасты.getId()); BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build(); Blob blob = Storage.create(blobInfo, SerializationUtils.serialize(paste)); PasteDetails PasteDetails = PasteDetails.builder() .blobId(blobId) .bucket(blob.getBucket()) .строить(); PasteDetailsRepository.save(pasteDetails); log.info("Сохранение новой корзины с заголовком: {}", Paste.getTitle()); } public PasteDTO findPasteByTitle (заголовок строки) { Page blobs = Bucket.list(); for (Blob blob: blobs.getValues()) { если (title.equals(blob.getName())) { PasteDTO пастыDTO = пастыMapper.fromPasteToDTO((Вставить) SerializationUtils.deserialize(blob.getContent())); } } вернуть ноль; } } И вставьте контроллер:
пакет com.example.pastebin.controllers; импортировать com.example.pastebin.dto.PasteDTO; импортировать com.example.pastebin.mappers.PasteMapper; импортировать com.example.pastebin.repositories.PasteDetailsRepository; импортировать com.example.pastebin.services.PasteService; импортировать org.springframework.stereotype.Controller; импортировать org.springframework.ui.Model; импортировать org.springframework.web.bind.annotation.GetMapping; импортировать org.springframework.web.bind.annotation.PostMapping; импортировать java.security.Principal; @Контроллер общественный класс PasteController { частный окончательный PasteService PasteService; общественный PasteController (PasteService пастыService) { this.pasteService = PasteService; } @GetMapping("/add_paste") публичная строка addBinPage() { вернуться домой"; } @PostMapping("/add_paste") public String addBin(PasteDTO PasteDTO, Главный принципал) { PasteService.saveText(pasteDTO, Principal.getName()); вернуть «перенаправление:/вставки»; } @GetMapping("вставляет") public String allPastes (модель модели) { model.addAttribute("pastes",pasteService.findAll()); вернуть «пасты»; } } Будем благодарны за любую помощь. Спасибо.
Мобильная версия