【开发者必备】Spring Boot 2.7.x:WebMvcConfigurer配置手册来了(七)!

2025-12-12 0 995

01 引言

上一期我们介绍了两个MessageConverters和两个ExceptionResolvers,分别是消息转化器和异常处理器,用来处理请求体和响应体。今天我们将分享关于WebMvcConfigurer配置的最后一节,这一节有两个方法:

  • getValidator
  • getMessageCodesResolver

02 方法17

@Nullable
default Validator getValidator() {
    return null;
}

作用:用于执行对象的数据验证,支持JSR-303 Bean Validation标准。

使用场景

  • 自定义参数验证器
  • 配置HibernateValidator校验的快速失败

2.1 使用说明

在使用之前,我们先了解一下validator是如何加载的。

自动装配的时候,org.springframework.validation.Validator需要配置实例化,从而出发配置类的getValidator方法。

如果获取到就使用配置的,如果没有获取到就加载已经存在的Bean(javax.validation.Validator.class)。如果还是没有,就会通过OptionalValidatorFactoryBean创建validator

所以我们可以通过getValidator的方式配置,也可以自定义Bean

2.2 自定义参数验证器

需要实现org.springframework.validation.Validator接口。

public class WjsonValidator implements Validator {
    @Override
    public boolean supports(Class clazz) {
        return Wjson.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        Wjson wjson = (Wjson)target;

        if (StringUtils.isBlank(wjson.getContent())) {
            errors.rejectValue(\"content\", \"WJSON_001\",\"content不能为空\");
        }

        if (StringUtils.isBlank(wjson.getVersion())) {
            errors.rejectValue(\"version\", \"WJSON_002\",\"version不能为空\");
        }
    }
}

自定义校验器简单的判断了参数是否为空。

2.4 配置

@Override
public Validator getValidator() {
    return new WjsonValidator();
}

2.5 控制层

@GetMapping(\"/testWjson\")
public void testWjson(@Validated Wjson wjson) {
    log.info(\"testWjson: wjson={} \", wjson);
}

2.6 测试结果

我们可以看到在参数不传的情况下,确实走了自定义的参数校验器,并抛出了org.springframework.validation.BindException

2.7 使用其他方式

如果想要使用注解校验参数,如:

我们需要引入校验依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

这个时候,我们不需要配置getValidator,使用系统的校验器,会自动识别注解校验。

当然也可以使用HibernateValidator.class,配置也有两种方式:

Bean定义

@Bean
public javax.validation.Validator validator() {
    ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
            .configure()
            // 快速失败模式
            .failFast(true)
            .buildValidatorFactory();
    return validatorFactory.getValidator();
}

getValidator方式

@Override
public Validator getValidator() {
    ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
            .configure()
            // 快速失败模式
            .failFast(true)
            .buildValidatorFactory();
    return new SpringValidatorAdapter(validatorFactory.getValidator());
}

值得注意的是getValidator返回的org.springframework.validation.Validator,而ValidatorFactory生成的是javax.validation.Validatorjavax.validation.Validatororg.springframework.validation.Validator时,需要借助适配器SpringValidatorAdapter类。

03 方法18

@Nullable
default MessageCodesResolver getMessageCodesResolver() {
    return null;
}

作用:用于生成验证错误的消息代码,它根据验证失败的类型和字段生成一组有序的消息代码。

使用场景

  • 自定义异常信息Code

3.1 使用说明

getMessageCodesResolver方法使Validator内部的一个方法。当调用errors.rejectValue时会被调用。

3.2 自定义一组Code

public class CustomMessageCodesResolver extends DefaultMessageCodesResolver {

    @Override
    public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class fieldType) {
        System.out.println(\"resolveMessageCodes 。。。。。\");
        Set codeList = new LinkedHashSet();

        // 添加自定义消息代码
        codeList.add(errorCode + \".\" + objectName + \".\" + field);
        codeList.add(errorCode + \".\" + field);
        codeList.add(errorCode + \".\" + fieldType.getSimpleName());
        codeList.add(errorCode + \"_这是我自定义的Code之一\");
        codeList.add(errorCode);
        System.out.println(codeList);

        return codeList.toArray(new String[0]);
    }
}

3.3 配置

@Override
public MessageCodesResolver getMessageCodesResolver() {
    return new CustomMessageCodesResolver();
}

3.4 测试

图中展示就是自定义的Code

04 小结

在参数校验的过程中一般都不需要我们自己配置,SpringBoot的自动装配已经很强大了。但是特殊场景需要我们定制开发,就需要了解框架为我们提供的扩展点。

总共经过7小结的整理,终于介绍完了WebMvcConfigurer的所有配置项。现在可能用不着,以后那一天可能就用到了。赶快收藏起来吧。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 【开发者必备】Spring Boot 2.7.x:WebMvcConfigurer配置手册来了(七)! https://www.zuozi.net/35757.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务