【问题标题】:Unable to Read keys form YAML无法从 YAML 读取密钥
【发布时间】:2020-07-06 08:21:54
【问题描述】:

我是 Spring Boot 的新手,我正在尝试从 application.yml 读取验证消息,但无法这样做

这里是我的模型类

@Entity
@Table(name = "users_data")
public class User {

    @NotBlank(message = "${errorresponse.useridMissing}")
    @Column(name = "user_id")
    private String userId;

 public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}

我的配置类

@Component
@ConfigurationProperties("errorresponse")
public class ErrorResponsesConfig {


private  String useridMissing ;

public String getMissingValue() {
    return useridMissing;
}

public void setMissingValue(String useridMissing) {
    this.useridMissing = useridMissing;
}

}

application.yml 看起来像这样

spring:
  jpa:
    show-sql: true
    hibernate:
    ddl-auto: update
errorresponse:
   useridMissing: Please provide UserID

但在 bean 验证期间验证失败时不会读取值

当我运行单元测试时,它给了我以下异常

javax.el.PropertyNotFoundException: ELResolver cannot handle a null base Object with identifier 'errorresponse'
at com.sun.el.lang.ELSupport.throwUnhandled(ELSupport.java:42) ~[jakarta.el-3.0.3.jar:3.0.3]
at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:100) ~[jakarta.el-3.0.3.jar:3.0.3]
at com.sun.el.parser.AstValue.getBase(AstValue.java:125) ~[jakarta.el-3.0.3.jar:3.0.3]
at com.sun.el.parser.AstValue.getValue(AstValue.java:173) ~[jakarta.el-3.0.3.jar:3.0.3]
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183) ~[jakarta.el-3.0.3.jar:3.0.3]
at org.hibernate.validator.internal.engine.messageinterpolation.ElTermResolver.interpolate(ElTermResolver.java:67) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm.interpolate(InterpolationTerm.java:64) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolate(ResourceBundleMessageInterpolator.java:159) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolateExpression(AbstractMessageInterpolator.java:519) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolateMessage(AbstractMessageInterpolator.java:415) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolate(AbstractMessageInterpolator.java:355) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator.interpolate(LocaleContextMessageInterpolator.java:51) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.interpolate(AbstractValidationContext.java:313) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]
at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.addConstraintFailure(AbstractValidationContext.java:230) ~[hibernate-validator-6.1.5.Final.jar:6.1.5.Final]

请指导我做错了什么!

谢谢

【问题讨论】:

    标签: spring-boot spring-data-jpa bean-validation


    【解决方案1】:

    不应在 application.yml 中管理的验证或 i18n 消息。在 Java/Spring 应用程序中,您应该为此使用属性文件,并且语法在您的模型中没有 $:

    @NotEmpty(message = "{email.notempty}")
    @Email
    private String email;
    

    有关更多信息,请查看本教程:Custom Validation MessageSource in Spring Boot

    【讨论】:

    • 点击了链接,但它仍然无法正常工作,没有错误或异常,仍然没有选择它
    • JSON 路径错误不匹配。预期:包含 ["请提供 UserId"] 的可迭代实际:[{errorresponse.useridMissing}]....... java.lang.AssertionError: 1 预期失败。 JSON 路径错误与预期不匹配:可迭代包含 [“请提供 UserId”] 实际:[{errorresponse.useridMissing}]
    • 实际上我在源配置类上缺少@Configuratoin,它正在工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2013-12-25
    • 2015-10-27
    • 2019-07-19
    • 2020-01-20
    • 1970-01-01
    相关资源
    最近更新 更多