【问题标题】:How to return validation message using Enum class in spring boot?如何在 Spring Boot 中使用 Enum 类返回验证消息?
【发布时间】:2021-10-30 00:54:26
【问题描述】:

我不是在问“如何验证枚举”。

假设我有这样的请求正文:

public class VerifyAccountRequest {
    
    @Email(message = "2")
    private String email;
}

我想做什么,而不是硬编码的方式,我只想从枚举类返回消息的值。但 IDEA 是说“属性值必须是常量”

public enum MyEnum {
    EMAIL("2", "info"),
    public String messageCode;
    public String info;
}

public class VerifyAccountRequest {
    
    @Email(message = MyEnum.Email.code) // NOT_WORKING
    private String email;
}

我也可以在界面中定义“2”,但我不想那样做:

public interface MyConstant {
    String EMAIL = "2";
}

public class VerifyAccountRequest {
    
    @Email(message = MyConstant.EMAIL) // WORKS, BUT I HAVE TO USE ENUM !!!
    private String email;
}

是否可以使用枚举类返回消息值?

【问题讨论】:

标签: java spring-boot spring-validator


【解决方案1】:

Java 规则规定,如果您有一个注解,并且它有一个需要原始类型(例如 int)或字符串的参数,则值必须是常量表达式。您正在尝试在运行时设置一个值。但是,注解属性必须在 JVM 加载类之前有一个准确的值,否则会报错。

结构体element_value可以存储四种不同类型的值:

  1. 常量池中的常量
  2. 类文字
  3. 嵌套注释
  4. 一组值

因此,注释属性中的常量是编译时常量。否则,编译器将不知道应该将什么值放入常量池并将其用作注释属性。更多信息请阅读this

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2020-11-30
    • 1970-01-01
    • 2018-01-23
    • 2021-07-17
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多