Необходимы ли какие-либо действия, чтобы валидаторы запросов Spring работали в развернутых средах?
Мои валидаторы корректно работают в локальной среде, возвращая 400 неверных запросов с кодами ошибок, но не работают в развернутых средах. Среды E2E возвращают простой ответ об ошибке 500.
При проверке журналов сервера E2E развертывания я вижу фактический текст кода ошибки, но все равно возвращает ответ 500.
Примечание. Если я отправлю правильный запрос в Local или E2E, он вернет правильный код успеха 200.
Код: Выделить всё
@ControllerAdvice
public class ValidationHandler extends ResponseEntityExceptionHandler{
@Override
protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
Map errors = new HashMap();
ex.getBindingResult().getAllErrors().forEach((error) ->{
String fieldName = ((FieldError) error).getField();
String message = error.getDefaultMessage();
errors.put(fieldName, message);
});
return new ResponseEntity(errors, HttpStatus.BAD_REQUEST);
}
}
@Data
public class ProductRequest {
@NotNull
@NotBlank
@Valid
@JsonProperty("productId")
private String productId;
@NotNull
@NotBlank
@Valid @JsonProperty("productRecordTime")
private String productRecordTime = LocalDateTime.now().toString();;
}
[c.i.p.C.s.r.c.e.GenericExceptionHandler]-[50]-обработка неожиданного
исключения
org.springframework.web .bind.MethodArgumentNotValidException:
Не удалось выполнить проверку аргумента [1] в public
org.springframework.http.ResponseEntity
[Ошибка поля в объекте «productRequest» в поле «productId[0]»:
отклоненное значение
[ProductRequestorg.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:141)< br />at
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
at
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues (InvocableHandlerMethod.java:179)
at
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146)
at
org.springframework.web .servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java: 895)
в
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
в
org.springframework.web. servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) at
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
в javax.servlet.http.HttpServlet.service(HttpServlet.java:584) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:178)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at
org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at
org.apache. catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at
com.identity.authz.spring.sdk.context.LiveDiffFilter.doFilter(LiveDiffFilter.java:30)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)< br />at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor .invoke(FilterSecurityInterceptor.java:115)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
at
org .springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter( FilterChainProxy.java:346)
at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
at
org.springframework.security. web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346 )
at
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain .doFilter(FilterChainProxy.java:346)
at
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at
org.springframework .security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
at< br />org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
Источник: https://stackoverflow.com/questions/781 ... instead-of