Code: Select all
create table if not exists test_product
(
id bigserial not null,
version bigserial not null,
name text not null,
sku varchar(50) not null,
primary key (id)
);
create table if not exists test_product_image_gallery_seo
(
id bigserial not null,
version bigserial not null,
product_id bigint not null,
image text not null,
alt_text text not null,
primary key (id),
constraint fk_product_id foreign key (product_id) references test_product (id),
constraint test_unique_seo unique (product_id, image)
);
TestProduct
Code: Select all
@Entity(name = "test_product")
@Table(name = "test_product")
public class TestProduct extends BehemothORM {
@Column(
name = ProductContract.NAME,
nullable = false,
unique = true,
columnDefinition = "TEXT"
)
private String name;
@Column(
name = ProductContract.SKU,
nullable = false,
unique = true,
columnDefinition = "VARCHAR"
)
private String sku;
@OneToMany(
mappedBy = "product",
fetch = FetchType.EAGER,
targetEntity = TestProductImageGallerySEO.class,
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List imageGallerySEOList;
}
Code: Select all
@Entity(name = "test_product_gallery_image_seo")
@Table(
name = "test_product_gallery_image_seo",
uniqueConstraints = {
@UniqueConstraint(
name = "test_unique_seo",
columnNames = {
ProductImageGallerySEOContract.PRODUCT_ID,
ProductImageGallerySEOContract.IMAGE
}
)
}
)
public class TestProductImageGallerySEO extends BehemothORM {
@Column(
name = "image",
columnDefinition = "TEXT",
nullable = false
)
private String image;
@Column(
name = "alt_text",
columnDefinition = "TEXT",
nullable = false
)
private String altText;
@ToString.Exclude
@ManyToOne(
targetEntity = TestProduct.class,
fetch = FetchType.EAGER
)
@JoinColumn(
name = ProductImageGallerySEOContract.PRODUCT_ID,
columnDefinition = "BIGSERIAL",
nullable = false,
foreignKey = @ForeignKey(
name = "fk_product_id"
)
)
@GsonExclude
private TestProduct product;
@Transient
private boolean deleted = false;
}
Code: Select all
@Transactional()
public int modifyGalleryImages(@NotNull TestProductImageGallerySEOPayload seoPayload) {
// gets the current product as entity from database
TestProduct product = this.testProductDAOController.retrieveEntity(seoPayload.getProductId());
for (TestProductImageGallerySEO imageGallerySEO : seoPayload.getGallerySEOList())
{
imageGallerySEO.setProduct(product);
this.addNewEntity(imageGallerySEO);
}
return ActionCode.UPDATE_SUCCESS;
}
Nach dem Upgrade von Hibernate von Version 6.3.1 auf 6.6.3 habe ich Ich erhalte die folgende Fehlermeldung:
Code: Select all
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.bloomscorp.loom.seo.orm.TestProductImageGallerySEO#0]
Code: Select all
{
"productId": 37503,
"gallerySEOList": [
{
"id": 0,
"version": 0,
"image": "uvw.jpg",
"altText": "",
"deleted": false
},
{
"id": 0,
"version": 0,
"image": "https://abc.jpg",
"altText": "",
"deleted": false
},
{
"id": 0,
"version": 0,
"image": "https://xyz.jpg",
"altText": "",
"deleted": false
}
]
}
Wenn jemand wissen möchte, was BehemothORM und addNewEntity tun , das sind im Grunde unsere eigenen Bibliotheken, die wir verwenden, um den Entwicklungsprozess zu beschleunigen. Hier ist die Definition dieser beiden
BehemothORM
Code: Select all
BehemothORM
addNewEntity
Code: Select all
addNewEntity
Fragen:
- Warum? Tritt dieser Fehler jetzt nach dem Upgrade von Hibernate auf?
- Wie kann ich diesen Fehler beheben und gleichzeitig die aktuelle Logik beibehalten?
Bearbeiten
Wie von @M.Deinum angefordert, hier ist der vollständige Stacktrace
Code: Select all
jakarta.servlet.ServletException: Request processing failed: org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [ c o m . b l o o m s c o r p . l o o m . s e o . o r m . T e s t P r o d u c t I m a g e G a l l e r y S E O # 0 ] < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . p r o c e s s R e q u e s t ( F r a m e w o r k S e r v l e t . j a v a : 1 0 2 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . d o P o s t ( F r a m e w o r k S e r v l e t . j a v a : 9 1 4 ) < b r / > a t j a k a r t a . s e r v l e t . h t t p . H t t p S e r v l e t . s e r v i c e ( H t t p S e r v l e t . j a v a : 5 9 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . s e r v i c e ( F r a m e w o r k S e r v l e t . j a v a : 8 8 5 ) < b r / > a t j a k a r t a . s e r v l e t . h t t p . H t t p S e r v l e t . s e r v i c e ( H t t p S e r v l e t . j a v a : 6 5 8 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 9 5 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 4 0 ) < b r / > a t o r g . a p a c h e . t o m c a t . w e b s o c k e t . s e r v e r . W s F i l t e r . d o F i l t e r ( W s F i l t e r . j a v a : 5 1 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 6 4 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 4 0 ) < b r / > a t c o m . b l o o m s c o r p . n v e r s e . N V e r s e R e q u e s t F i l t e r . d o F i l t e r I n t e r n a l ( N V e r s e R e q u e s t F i l t e r . j a v a : 5 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 1 1 6 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 6 4 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 4 0 ) < b r / > a t c o m . b l o o m s corp.nverse.NVerseExceptionHandlerFilter.doFilterInternal(NVerseExceptionHandlerFilter.java:58)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at com.bloomscorp.nverse.NVerseHttpRequestFilter.doFilterInternal(NVerseHttpRequestFilter.java:20)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:219)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [ c o m . b l o o m s c o r p . l o o m . s e o . o r m . T e s t P r o d u c t I m a g e G a l l e r y S E O # 0 ] < b r / > a t o r g . s p r i n g f r a m e w o r k . o r m . j p a . v e n d o r . H i b e r n a t e J p a D i a l e c t . c o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( H i b e r n a t e J p a D i a l e c t . j a v a : 3 0 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . o r m . j p a . v e n d o r . H i b e r n a t e J p a D i a l e c t . t r a n s l a t e E x c e p t i o n I f P o s s i b l e ( H i b e r n a t e J p a D i a l e c t . j a v a : 2 3 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . o r m . j p a . A b s t r a c t E n t i t y M a n a g e r F a c t o r y B e a n . t r a n s l a t e E x c e p t i o n I f P o s s i b l e ( A b s t r a c t E n t i t y M a n a g e r F a c t o r y B e a n . j a v a : 5 5 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . C h a i n e d P e r s i s t e n c e E x c e p t i o n T r a n s l a t o r . t r a n s l a t e E x c e p t i o n I f P o s s i b l e ( C h a i n e d P e r s i s t e n c e E x c e p t i o n T r a n s l a t o r . j a v a : 6 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . D a t a A c c e s s U t i l s . t r a n s l a t e I f N e c e s s a r y ( D a t a A c c e s s U t i l s . j a v a : 2 4 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . i n v o k e ( P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . j a v a : 1 5 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a t a . j p a . r e p o s i t o r y . s u p p o r t . C r u d M e t h o d M e t a d a t a P o s t P r o c e s s o r $ C r u d M e t h o d M e t a d a t a P o p u l a t i n g M e t h o d I n t e r c e p t o r . i n v o k e ( C r u d M e t h o d M e t a d a t a P o s t P r o c e s s o r . j a v a : 1 6 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . i n t e r c e p t o r . E x p o s e I n v o c a t i o n I n t e r c e p t o r . i n v o k e ( E x p o s e I n v o c a t i o n I n t e r c e p t o r . j a v a : 9 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . J d k D y n a m i c A o p P r o x y . i n v o k e ( J d k D y n a m i c A o p P r o x y . j a v a : 2 4 4 ) < b r / > a t j d k . p r o x y 2 / j d k . p r o x y 2 . $ P r o x y 2 6 5 . s a v e ( U n k n o w n S o u r c e ) < b r / > a t c o m . b l o o m s c o r p . b e h e m o t h . d a o . c o n t r o l l e r . A b s t r a c t A d d E n t i t y D A O C o n t r o l l e r . a d d N e w E n t i t y ( A b s t r a c t A d d E n t i t y D A O C o n t r o l l e r . j a v a : 2 2 ) < b r / > a t c o m . b l o o m s c o r p . l o o m . s e o . d a o . c o n t r o l l e r . T e s t P r o d u c t I m a g e G a l l e r y S E O D A O C o n t r o l l e r . m o d i f y G a l l e r y I m a g e s ( T e s t P r o d u c t I m a g e G a l l e r y S E O D A O C o n t r o l l e r . j a v a : 7 8 ) < b r / > a t j a v a . b a s e / j d k . i n t e r n a l . r e f l e c t . D i r e c t M e t h o d H a n d l e A c c e s s o r . i n v o k e ( D i r e c t M e t h o d H a n d l e A c c e s s o r . j a v a : 1 0 3 ) < b r / > a t j a v a . b a s e / j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 5 8 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . s u p p o r t . A o p U t i l s . i n v o k e J o i n p o i n t U s i n g R e f l e c t i o n ( A o p U t i l s . j a v a : 3 4 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . i n v o k e J o i n p o i n t ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 9 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 6 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y $ C g l i b M e t h o d I n v o c a t i o n . p r o c e e d ( C g l i b A o p P r o x y . j a v a : 7 5 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . i n v o k e ( P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y $ C g l i b M e t h o d I n v o c a t i o n . p r o c e e d ( C g l i b A o p P r o x y . j a v a : 7 5 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n I n t e r c e p t o r $ 1 . p r o c e e d W i t h I n v o c a t i o n ( T r a n s a c t i o n I n t e r c e p t o r . j a v a : 1 2 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n A s p e c t S u p p o r t . i n v o k e W i t h i n T r a n s a c t i o n ( T r a n s a c t i o n A s p e c t S u p p o r t . j a v a : 3 9 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n I n t e r c e p t o r . i n v o k e ( T r a n s a c t i o n I n t e r c e p t o r . j a v a : 1 1 9 ) < b r / > a t o r g . s p r i n g f r a m e w o r k .aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)
at com.bloomscorp.loom.seo.dao.controller.TestProductImageGallerySEODAOController$$SpringCGLIB$$0.modifyGalleryImages()
at com.bloomscorp.loom.seo.controller.ProductImageGallerySEOController.lambda$modifyGalleryImages$1(ProductImageGallerySEOController.java:126)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.post(AbstractPostEntityController.java:95)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.postEntityEnhancedResponse(AbstractPostEntityController.java:280)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.postEntity(AbstractPostEntityController.java:140)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.postEntity(AbstractPostEntityController.java:167)
at com.bloomscorp.loom.seo.controller.ProductImageGallerySEOController.modifyGalleryImages(ProductImageGallerySEOController.java:117)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
at com.bloomscorp.nverse.validator.NVerseValidationAspect.validateByDomainValidator(NVerseValidationAspect.java:67)
at com.bloomscorp.nverse.validator.NVerseValidationAspect.validateDomainContext(NVerseValidationAspect.java:123)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:173)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)
at com.bloomscorp.loom.seo.controller.ProductImageGallerySEOController$$SpringCGLIB$$0.modifyGalleryImages()
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:798)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
... 61 more
Code: Select all
@ResponseBody
@PostMapping(
value = "modify/test/gallery-images",
consumes = Constant.REQUEST_TYPE_APPLICATION_JSON,
produces = Constant.RESPONSE_TYPE_APPLICATION_JSON
)
public RainTreeResponse modifyGalleryImages(
NVerseHttpRequestWrapper request,
@RequestBody TestProductImageGallerySEOPayload gallerySEOPayload
) {
return this.postEntity(
request,
"modifyGalleryImages",
CODE_SUCU,
UNAUTH_GALLERY_IMAGE_REQUEST,
NEW_GALLERY_IMAGE_CREATED,
this.testValidator,
new TestProductImageGallerySEOPayloadSanitizer(),
gallerySEOPayload,
() -> this.testSEODAOController.modifyGalleryImages(
this.getAuthorityResolver().resolveUserInformationFromAuthorizationToken(
request.getHeader(Constant.REQUEST_HEADER_AUTHORIZATION)
),
gallerySEOPayload
)
);
}