首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在抛出ConstraintViolationException时获取经过验证的字段名而不是arg0

在抛出ConstraintViolationException时获取经过验证的字段名,可以通过以下步骤实现:

  1. 首先,需要使用Java的Bean Validation API来进行数据验证。在验证过程中,如果存在验证失败的情况,会抛出ConstraintViolationException异常。
  2. 当捕获到ConstraintViolationException异常时,可以通过调用getConstraintViolations()方法获取到验证失败的详细信息,包括验证失败的字段名。
  3. 遍历ConstraintViolation对象集合,可以通过调用getPropertyPath()方法获取到验证失败的字段路径。字段路径是一个包含了字段层级关系的对象,可以通过调用toString()方法将其转换为字符串。
  4. 为了获取经过验证的字段名,可以通过解析字段路径字符串来提取字段名。一种常见的解析方式是使用正则表达式或字符串分割等方法,根据具体的字段路径格式进行解析。
  5. 解析出字段名后,可以进行进一步的处理,例如记录日志、返回给前端等。

以下是一个示例代码,展示了如何在抛出ConstraintViolationException时获取经过验证的字段名:

代码语言:txt
复制
try {
    // 执行数据验证操作
    // ...
} catch (ConstraintViolationException ex) {
    Set<ConstraintViolation<?>> violations = ex.getConstraintViolations();
    for (ConstraintViolation<?> violation : violations) {
        String propertyPath = violation.getPropertyPath().toString();
        // 解析字段路径,提取字段名
        String fieldName = parseFieldName(propertyPath);
        // 处理经过验证的字段名
        // ...
    }
}

// 解析字段路径,提取字段名的方法示例
private String parseFieldName(String propertyPath) {
    // 根据具体的字段路径格式进行解析,这里仅作示例
    String[] pathSegments = propertyPath.split("\\.");
    return pathSegments[pathSegments.length - 1];
}

请注意,以上示例代码仅为演示目的,实际的解析方式可能因具体的字段路径格式而有所不同。在实际应用中,可以根据具体的需求和数据结构进行适当的调整和优化。

推荐的腾讯云相关产品:腾讯云Serverless云函数(SCF),它是一种事件驱动的无服务器计算服务,可以帮助开发者更轻松地构建和管理无服务器应用。您可以通过以下链接了解更多信息:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

让Controller支持对平铺参数执行数据校验(默认Spring MVC使用@Valid只能对JavaBean进行校验)【享学Spring】

验证并不支持对Controller处理方法平铺参数校验。...上篇文章一起了解了Spring MVC中对Controller处理器入参校验问题,但也仅局限于对JavaBean验证。...抛出了javax.validation.ConstraintViolationException异常,这样我们再结合一个全局异常处理程序,也就能达到我们预定效果了~ 这种方案一样有一个非常值得注意但是很多人都会忽略地方...所以为了简便此处写上value值,当然这里是可以优化,有兴趣小伙伴可自行定制 因为制定了value值,错误信息中也能正确识别出字段名了~ 在Spring MVC自动数据封装体系中,value值不是必须...,只要字段名对应上了也是ok(这里面运用了字节码技术,后文有讲解)。

98110

用最低成本,提高你代码稳壮性。

以下Dubbo验证为官方文档中内容。 参数验证功能是基于 JSR303 实现,用户只需标识 JSR303 标准验证 annotation,并通过声明 filter 来实现验证。...public interface ValidationService { // 缺省可按服务接口区分验证场景,:@NotNull(groups = ValidationService.class)...@interface Save{} // 与方法同名接口,首字母大写,用于区分验证场景,:@NotNull(groups = ValidationService.Save.class),可选...另外需要注意是,controller层抛出校验异常类型是 org.springframework.web.bind.MethodArgumentNotValidException service层抛出校验异常类型是...javax.validation.ConstraintViolationException 工具类方式校验,需要拿到参数处理,再自定义异常抛出

48030

Java 使用ControllerAdvice进行全局异常处理以及全局统一返回值处理

不然假设后端因为某些原因抛出异常,比如空指针,文件不存在等,会直接返回500 在前后端分离项目中,前端会拿到internal server error + 后端一大堆异常堆栈。...另外还可以通过自定义异常,在需要时候抛出异常,交给全局异常处理器来返回某些逻辑;通过编码可以实现全局异常处理器对不同类型异常执行不同逻辑。...除了使用springvalidation自动校验参数,有时可能需要程序中动态校验来弥补validation不能完成逻辑,若不符合验证条件就抛出paramerrorexception 另外在业务逻辑中出现一些返回值仅代表成功运行函数...,无法通过返回值区分成功失败情况,就可以手动抛出tipexception来交给异常处理器处理返回。...另外还判断了404情况,针对前端访问了一个后端不存在接口地址,返回提示信息不是404状态码。

3.1K31

Controller层代码这么写,简洁又优雅!

如果校验失败,会抛出 ConstraintViolationException 异常。...     */     String message() default "不是一个手机号码格式";     /**      * Constraint要求属性,用于分组校验和扩展,留空就好      ...    /**      * 在验证开始前调用注解里方法,从而获取到一些注解里参数      *      * @param constraintAnnotation annotation instance...,但是异常返回结构和正常返回结构不一致 自定义异常是为了后面统一拦截异常,对业务中异常有更加细颗粒度区分,拦截时针对不同异常作出不同响应。...统一拦截异常目的一个是为了可以与前面定义下来统一包装返回结构能对应上,另一个是我们希望无论系统发生什么异常,Http 状态码都要是 200 ,尽可能由业务来区分系统异常。

32420

SpringBoot项目实战:自定义异常和统一参数验证(附源码)

但是,我们在上面使用到是统一异常处理,我们在方法参数验证时候,也会用到统一异常处理。...(注意:是没有传,不是传了,但是值是null)。...MethodArgumentNotValidException :经过测试,当校验参数放在对象中,接口请求方式是post请求,用@Valid @RequestBody方式接受参数,如果报错,会被该捕获器捕获...BindException :经过测试,当校验参数写在类中,接口请求方式是get请求,报错会被该捕获器捕获。 ConstraintViolationException :传了值,但是不符合要求。...经过测试,当校验参数直接写在接口上,不是写在类中,报错会被该捕获器捕获。

49730

Controller层代码这么写,简洁又优雅!

,对于一般类型都没有问题,当处理字符串类型,会抛出 xxx.包装类 cannot be cast to java.lang.String 类型转换异常 在 ResponseBodyAdvice...( Integer 类型) 现在问题已经较为清晰了,因为我们需要返回一个 Result 对象 所以使用 MappingJackson2HttpMessageConverter 是可以正常转换...如果校验失败,会抛出 ConstraintViolationException 异常 //DTO @Data public class TestDTO { @NotBlank private.../** * 在验证开始前调用注解里方法,从而获取到一些注解里参数 * * @param constraintAnnotation annotation instance...,但是异常返回结构和正常返回结构不一致 自定义异常是为了后面统一拦截异常,对业务中异常有更加细颗粒度区分,拦截时针对不同异常作出不同响应 统一拦截异常目的一个是为了可以与前面定义下来统一包装返回结构能对应上

74820

Dubbo服务如何优雅校验参数

本文主要也是想给大家介绍下如何在使用Dubbo做好优雅参数校验。 二、解决方案 Dubbo框架本身是支持参数校验,同时也是基于JSR303去实现,我们来看下具体是怎么实现。...,当消费端调用Dubbo服务,参数如果不合法就会抛出相关异常信息,消费端调用时也能识别出异常信息,似乎这样就没有问题了。...从异常堆栈内容我们可以看出这个异常信息返回是由ValidationFilter抛出,从名字我们可以猜到这个是采用DubboFilter扩展机制一个内置实现,当我们对Dubbo服务接口启用参数校验...「违反约束」信息都被加入到violations集合中,而在「注3」处检查到「违反约束」不为空,就会抛出包含「违反约束」信息ConstraintViolationException,该异常继承自ValidationException...唯一不同地方就在于「注1」处所新增针对特定异常ConstraintViolationException处理,从异常对象中获取包含「违反约束」信息,并取其中第一个来构造业务上所定义通用数据格式FacadeResult

1.3K10

SpringBoot中异常处理与参数校验

不是try整个业务代码。...注意坑: 这里跟大家分享一个踩过坑,不能再Filter过滤器中抛出异常,如果通过在过滤器中抛出异常,然后通过异常处理类来处理,那么是不可能,因为处理器是捕获不到Filter抛出异常。...如果参数不满足要求,那么会抛出ConstraintViolationException异常,这个异常只有在单一参数校验时候抛出,如果你参数是JavaBean,那么就不是这个异常了。...) public Object constraintViolationException(ConstraintViolationException ex) { // 获取具体错误信息...return "SUCCESS"; } 跟单一参数校验不一样是JavaBean校验方式需要将@Validated写在方法参数,不是类上。

88220

【原创】关于Spring中参数校验一点思考

下面我会通过实例程序演示如何在 Java 程序中尤其是 Spring 程序中优雅地进行参数验证。...•@Range(min=,max=,message=) 被注释元素必须在合适范围内 验证Controller输入 验证请求体(RequestBody) Controller: 我们在需要验证参数上加上了...@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。....andExpect(MockMvcResultMatchers.jsonPath("email").value("Snailclimb@qq.com")); } } 验证出现参数不合法情况抛出异常并且可以正确被捕获...")); } 验证 Service 中方法 我们还可以验证任何Spring组件输入,不是验证控制器级别的输入,我们可以使用@Validated和@Valid注释组合来实现这一需求。

94710

有什么提高代码稳壮性方式?

来源:肥朝 配置参数启动校验 如果配置文件没有相关配置,那么启动就会出现以下异常: Description: Binding to target com.toby.provide.ApplicationProperties...如果你不用该方式校验,很容易在某个特殊场景下,才触发出坑。但是你采用这种方式,做了大量启动校验,一旦参数不合法,项目启动都启动不了,做到了防范于未然!...以下Dubbo验证为官方文档中内容。 参数验证功能是基于 JSR303 实现,用户只需标识 JSR303 标准验证 annotation,并通过声明 filter 来实现验证。...@interface Save{} // 与方法同名接口,首字母大写,用于区分验证场景,:@NotNull(groups = ValidationService.Save.class),可选...parameter); System.out.println("Validation ERROR"); } catch (RpcException e) { // 抛出

41220

Spring方法级别数据校验:@Validated + MethodValidationPostProcessor优雅完成数据校验动作【享学Spring】

result.isEmpty()) { // 有错误就抛异常抛出去 throw new ConstraintViolationException(result); } // 执行目标方法...1、约束注解(@NotNull)不能放在实体类上 一般情况下,我们对于Service层验证(Controller层一般都不给接口),大都是面向接口编程和使用,那么这种@NotNull放置位置应该怎么放置呢...重说三:请务必注意请务必注意请务必注意这个异常是javax.validation.ConstraintDeclarationException,不是错误校验错误异常javax.validation.ConstraintViolationException...提出这个细节目的是:约束注解并不是能用在所有类型上。...在实际开发中,其实大多数情况下我们方法入参是个对象(甚至对象里面有对象),不是单单平铺参数,因此就介绍一个级联属性校验例子: @Getter @Setter @ToString public class

2.4K21

Spring Validation最佳实践及其实现原理,参数校验没那么简单

hibernate validation是对这个规范实现,并增加了校验注解@Email、@Length等。...在这种情况下,必须在Controller类上标注@Validated注解,并在入参上声明约束注解(@Min等)。如果校验失败,会抛出ConstraintViolationException异常。...return Result.fail(BusinessCode.参数校验失败, ex.getMessage()); } } 进阶使用 分组校验 在实际项目中,可能多个方法需要使用同一个DTO类来接收参数,不同方法校验规则很可能是不一样...编程式校验 上面的示例都是基于注解来实现自动校验,在某些情况下,我们可能希望以编程方式调用验证。这个时候可以注入javax.validation.Validator对象,然后再调用其api。...result.isEmpty()) { throw new ConstraintViolationException(result); } //真正方法调用 Object returnValue =

1.6K10

SpringBoot中异常处理和参数校验

不是try整个业务代码。...注意坑: 这里跟大家分享一个踩过坑,不能再Filter过滤器中抛出异常,如果通过在过滤器中抛出异常,然后通过异常处理类来处理,那么是不可能,因为处理器是捕获不到Filter抛出异常。...如果参数不满足要求,那么会抛出ConstraintViolationException异常,这个异常只有在单一参数校验时候抛出,如果你参数是JavaBean,那么就不是这个异常了。...) public Object constraintViolationException(ConstraintViolationException ex) { // 获取具体错误信息...return "SUCCESS"; } 跟单一参数校验不一样是JavaBean校验方式需要将@Validated写在方法参数,不是类上。

74530

Springboot @Validated参数校验

hibernate validation是对这个规范实现,并增加了校验注解@Email、@Length等。...在这种情况下,必须在Controller类上标注@Validated注解,并在入参上声明约束注解(@Min等)。如果校验失败,会抛出ConstraintViolationException异常。...Result.fail(BusinessCode.参数校验失败, ex.getMessage()); } } 进阶使用 分组校验 在实际项目中,可能多个方法需要使用同一个DTO类来接收参数,不同方法校验规则很可能是不一样...编程式校验 上面的示例都是基于注解来实现自动校验,在某些情况下,我们可能希望以编程方式调用验证。这个时候可以注入javax.validation.Validator对象,然后再调用其api。...result.isEmpty()) { throw new ConstraintViolationException(result); } //真正方法调用

1.2K20

何在 SpringSpring Boot 中做参数校验?你需要了解都在这里!

下面我会通过实例程序演示如何在 Java 程序中尤其是 Spring 程序中优雅地进行参数验证。...@NotEmpty 被注释字符串必须非空 @Range(min=,max=,message=) 被注释元素必须在合适范围内 验证Controller输入 验证请求体(RequestBody...) Controller: 我们在需要验证参数上加上了@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。....andExpect(MockMvcResultMatchers.jsonPath("email").value("Snailclimb@qq.com")); } } 验证出现参数不合法情况抛出异常并且可以正确被捕获...")); } 验证 Service 中方法 我们还可以验证任何Spring组件输入,不是验证控制器级别的输入,我们可以使用@Validated和@Valid注释组合来实现这一需求。

1.2K50

springboot项目自定义统一异常处理

什么是异常 异常指的是在程序运行过程中发生异常事件,通常是由外部问题(硬件错误、输入错误)所导致。...1、在服务层抛出自定义异常类型及不可预知异常类型。 上图中BusinessException为系统自定义异常类型,程序中在代码显示抛出该异常,此类异常是程序员可预知 。...另一部分是系统无法预知异常,:数据库无法连接,服务器宕机等场景下所抛出异常,此类异常是程序员无 法预知异常。...2、应用层接收到服务层抛出异常继续向上抛出,应用层自己也可以抛出自定义异常类型及不可预知异常类型。 3、统一异常处理器捕获到异常进行解析。...判断如果为自定义异常则直接取出错误代码及错误信息,因为程序员在抛出自定义异常已将错误代码和异常信息 指定。 如果为不可预知异常则统一定义为99999异常代码。

1.6K10

手写dubbo框架8-SPI 自适应扩展机制

如果不是从上一章看过来,建议先看看上一章讲IOC部分。基础不牢地动山摇情况下无法分析。 自适应扩展机制解决了一个什么问题呢?...这也正是自适应扩展机制解决问题。 原理概括 为了更好理解,先把原理交个底。我总觉得一步步验证比一步步发掘要更能理解一件事物。...代理类里面的逻辑,就是根据传入Url对象中变量取得扩展对象并调用。...org.apache.dubbo.common.URL url = arg0; // 从URL中取出simple.ext值,默认值为impl1,从类上SPI注解中获取...不是所有方法都需要URL做为入参,那么dubbo是怎么处理呢? 对于入参中存在URL对象,获取方式就是直接遍历获得。

78250
领券