如何为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,可按以下步骤调整配置:
确认消息键格式完全匹配
确保消息键严格遵循{全限定类名}.{字段名}.{约束注解简单类名}的格式,比如你的场景中:org.company.User.name.NotNull=Username cannot be null需仔细检查包名、类名、字段名是否与实际生成的User类完全一致,避免拼写错误。
确保校验框架加载你的消息文件
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,框架会自动加载该文件。验证配置生效
重新构建项目并执行校验逻辑,此时User类name字段的@NotNull约束会使用你配置的专属消息,而非全局消息。
内容的提问来源于stack exchange,提问作者Arno Turelinckx

