繁体   English   中英

Javax 验证不包括字段名称

[英]Javax validation does not include field name

我们已经建立了一个 API 其中在我们的 model 我们有一个领域

@Min(1) @Max(16)
private Long demoField;

当我们向 demoField 提供 17 时,它会在客户端抛出一个错误

"must be less than or equal to 16"

但是当我们看到违规消息时,它包含字段名称并且消息看起来像

"demoField: must be less than or equal to 16"

所以问题是为什么我们没有在客户端错误消息中获取字段名称。

我错过了什么吗?

API 基于 spring 启动

默认不通过。 您可以实现自己的错误处理程序来自定义传回的消息,例如使用 @ControllerAdvice。

一种方法是只指定消息:@Min(value = 5, message="Age must be at least 5")

在这种情况下,在@ControllerAdvice 中,您只需要阅读 getDefaultMessage()

如果您不想手动添加默认消息,方法是按照以下方式实现一些东西(使用适当的 null 检查等):

package com.example.demo;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleBindException(
            BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        return new ResponseEntity<>(
                ex.getFieldError().getField() + ": " + ex.getFieldError().getDefaultMessage(),
                headers,
                status);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM