You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为OpenAPI生成的Spring Boot Bean配置自定义校验消息?

问题描述

我正尝试为Bean添加校验,以便在持久化前验证其状态。需要校验的Bean类由openapi-generator-maven-plugin插件从OpenAPI契约生成,契约中的限制已转化为Jakarta约束注解,简化后代码如下:

public class User {

    @NotNull
    private String name;
}

我在src/main/resources下添加了messages.properties文件,内容为:

jakarta.validation.constraints.NotNull.message=global not null error message

执行jakarta.validation.Validator.validate(user)时,全局消息生效,但我只想为User的name属性配置专属消息。我尝试在messages.properties中添加:

org.company.User.name.NotNull=Username cannot be null

但校验框架并未识别该配置。请问无需修改生成的Bean,如何通过配置实现特定属性的自定义校验消息?

解决方案

要实现特定属性的自定义校验消息,无需修改生成的Bean,可按以下步骤调整配置:

  1. 确认消息键格式完全匹配
    确保消息键严格遵循{全限定类名}.{字段名}.{约束注解简单类名}的格式,比如你的场景中:

    org.company.User.name.NotNull=Username cannot be null
    

    需仔细检查包名、类名、字段名是否与实际生成的User类完全一致,避免拼写错误。

  2. 确保校验框架加载你的消息文件
    Jakarta Validation默认会加载ValidationMessages.properties文件,如果你使用的是自定义文件名(如messages.properties),需要通过配置指定资源basename:
    在src/main/resources/META-INF下创建validation.xml文件,内容如下:

    <validation-config xmlns="https://jakarta.ee/xml/ns/jakartaee"
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/validation-config_3_0.xsd"
                       version="3.0">
        <property name="jakarta.validation.messageinterpolation.resourcebundle.baseName" value="messages"/>
    </validation-config>
    

    若不想额外创建配置文件,也可直接将messages.properties重命名为ValidationMessages.properties,框架会自动加载该文件。

  3. 验证配置生效
    重新构建项目并执行校验逻辑,此时User类name字段的@NotNull约束会使用你配置的专属消息,而非全局消息。

内容的提问来源于stack exchange,提问作者Arno Turelinckx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:23:21