如何在Spring Framework前端接收验证消息?

huangapple go评论103阅读模式
英文:

How to receive validation message on frontend in Spring Framework?

问题

我有验证约束:

  1. @Size(min = 3, message = "First name 'validatedValue' must be minimum 3 characters long")
  2. @Pattern(regexp = "^A(\\w)+$", message = "First name must start with capital letter")
  3. private String firstName;

在控制器中,我对请求体参数使用了@Valid注解。
如果验证失败,Spring会处理此问题,但我没有收到消息
为什么会发生这种情况?

我尝试添加了以下处理程序:

  1. @ExceptionHandler(ConstraintViolationException.class)
  2. public ResponseEntity<String> handle(ConstraintViolationException constraintViolationException) {
  3. Set<ConstraintViolation<?>> violations = constraintViolationException.getConstraintViolations();
  4. String errorMessage = "";
  5. if (!violations.isEmpty()) {
  6. ...
  7. } else {
  8. errorMessage = "ConstraintViolationException occurred.";
  9. }
  10. return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST);
  11. }
英文:

I have validation constraints:

  1. @Size(min = 3, message = &quot;First name &#39;${validatedValue} must be minimum 3 characters long&#39;&quot;)
  2. @Pattern(regexp = &quot;^A(\\w)+$&quot;, message = &quot;First name must start with capital letter&quot;)
  3. private String firstName;

In controller I have @Valid annotation for the request body argument.
If validation is failed - Spring resolves this, but I do not receive message.
Why does it happen?

I have tried to add this handler:

  1. @ExceptionHandler(ConstraintViolationException.class)
  2. public ResponseEntity&lt;String&gt; handle(ConstraintViolationException constraintViolationException) {
  3. Set&lt;ConstraintViolation&lt;?&gt;&gt; violations = constraintViolationException.getConstraintViolations();
  4. String errorMessage = &quot;&quot;;
  5. if (!violations.isEmpty()) {
  6. ...
  7. } else {
  8. errorMessage = &quot;ConstraintViolationException occured.&quot;;
  9. }
  10. return new ResponseEntity&lt;&gt;(errorMessage, HttpStatus.BAD_REQUEST);
  11. }

答案1

得分: 0

我猜,通过获取字段错误,可能是可以的。

希望下面的示例能够起作用:

  1. @ExceptionHandler(MethodArgumentNotValidException.class)
  2. public ResponseEntity<ResponseBuilder> handleMethodArgumentNotValidException(HttpServletRequest request,
  3. MethodArgumentNotValidException ex) {
  4. BindingResult result = ex.getBindingResult();
  5. List<org.springframework.validation.FieldError> fieldErrors = result.getFieldErrors();
  6. String errorMessage = messageSource.getMessage(ApiResponseCode.ERR_COMMON_REQ_BODY.getCode(),
  7. new Object[] {
  8. fieldErrors.stream().map(field -> field.getDefaultMessage()).collect(Collectors.joining(",")) },
  9. Locale.US);
  10. LOGGER.error(errorMessage, ex);
  11. return new ResponseEntity<ResponseBuilder>(
  12. new ResponseBuilder.Builder(ApiResponseCode.ERR_COMMON_REQ_BODY.getCode(), errorMessage).build(),
  13. HttpStatus.OK);
  14. }
英文:

I guess, It is possible by getting field error.

Hope below sample works out

  1. @ExceptionHandler(MethodArgumentNotValidException.class)
  2. public ResponseEntity&lt;ResponseBuilder&gt; handleMethodArgumentNotValidException(HttpServletRequest request,
  3. MethodArgumentNotValidException ex) {
  4. BindingResult result = ex.getBindingResult();
  5. List&lt;org.springframework.validation.FieldError&gt; fieldErrors = result.getFieldErrors();
  6. String errorMessage = messageSource.getMessage(ApiResponseCode.ERR_COMMON_REQ_BODY.getCode(),
  7. new Object[] {
  8. fieldErrors.stream().map(field -&gt; field.getDefaultMessage()).collect(Collectors.joining(&quot;,&quot;)) },
  9. Locale.US);
  10. LOGGER.error(errorMessage, ex);
  11. return new ResponseEntity&lt;ResponseBuilder&gt;(
  12. new ResponseBuilder.Builder(ApiResponseCode.ERR_COMMON_REQ_BODY.getCode(), errorMessage).build(),
  13. HttpStatus.OK);
  14. }

huangapple
  • 本文由 发表于 2020年3月16日 05:39:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/60697917.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定