J'ai un contrôleur de repos qui a un requestObject contenant 3 attributs et ils sont obligatoires. Fondamentalement, j'ai la classe ci-dessous qui contient la méthode contrainteViolationException pour traiter l'exception @notblank. Mon contrôleur est affiché ci-dessous: P> "timestamp": "2020-06-05T13:01:47.715+00:00",
"status": 400,
"error": "Bad Request",
"trace": "org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 3 errors\nField error in object 'myRequest' on field 'amount': rejected value [null]; codes [NotBlank.myRequest.amount,NotBlank.amount,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [myRequest.amount,amount]; arguments []; default message [amount]]; default message [Amount name mandatory]\nField error in object 'myRequest' on field 'accountId': rejected value [null]; codes [NotBlank.myRequest.accountId,NotBlank.accountId,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [myRequest.accountId,accountId]; arguments []; default message [accountId]]; default message [Account id is mandatory]\nField error in object 'myRequest' on field 'accountName': rejected value [null]; codes [NotBlank.myRequest.accountName,NotBlank.accountName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [myRequest.accountName,accountName]; arguments []; default message [accountName]]; default message [Account name mandatory]\r\n\tat org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:164)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.base/java.lang.Thread.run(Thread.java:832)\r\n",
"message": "Validation failed for object='myRequest'. Error count: 3",
"errors":[
{"codes":["NotBlank.myRequest.amount", "NotBlank.amount", "NotBlank.java.lang.String", "NotBlank" ],â¦},
{"codes":["NotBlank.myRequest.accountId", "NotBlank.accountId", "NotBlank.java.lang.String", "NotBlank" ],â¦},
{"codes":["NotBlank.myRequest.accountName", "NotBlank.accountName", "NotBlank.java.lang.String", "NotBlank" ],â¦}
],
"path": "/processMyPayment"
}
3 Réponses :
Essayez ceci:
/** * Handle @see MethodArgumentNotValidException. Triggered when an object fails validation. * * @param ex the @see MethodArgumentNotValidException that is thrown when validation fails * @param headers HttpHeaders @see HttpHeaders * @param status HttpStatus @see HttpStatus * @param request WebRequest @see WebRequest * @return ResponseEntity<Object> */ @Override protected ResponseEntity<Object> handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { // get Binding Result Object bindingResult = ex.getBindingResult(); // get specific field errors Object fieldErrors = ex.getBindingResult().getFieldErrors(); // get error counts int errorCount = ex.getBindingResult().getErrorCount(); // return, you can create custom responses based on fieldErrors and errorCounts as well and send that in the body below. return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(fieldErrors); }
Bonjour merci pour votre réponse, mais la réponse n'est pas définie dans le paramètre de méthode
Ont apporté des modifications dans le code ci-dessus pour votre référence, veuillez le regarder, et laissez-moi savoir si cela fonctionne pour vous!
Pouvez-vous partager spécifiquement ce qui ne fonctionne pas et aussi si possible, partagez votre capture d'écran aussi. S'il vous plaît une fois référencez-vous ci-dessus les deux liaisons GitHub (sera extrêmement utile pour vous).
Ont ajouté un nouvel extrait de code dans la réponse ci-dessus. S'il vous plaît regardez-le.
Vous gérez la mauvaise exception. ContrainteViolationException code> est destiné à la validation de l'objet / de domaine. Spring lance un
MéthodeArgumentNotValideXception code> dans la couche Web si vous utilisez
@valid code> sur l'argument de la méthode du contrôleur. Vous pouvez modifier votre gestionnaire d'exception comme tel:
Enfin, j'ai découvert la question dans le cas de quelqu'un d'autre qui vient à travers cela, je l'affiche. Basodialement, je devais remplacer la méthode suivante:
@Override protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { //add custom implementation here return this.handleExceptionInternal(ex, (Object)null, headers, status, request); }
Pouvez-vous attacher le code de contrôleur?
Merci pour la réponse rapide, j'ai ajouté la classe de contrôleur
Salut non encore de ne pas travailler
Vérifiez votre corps de réponse.