在 API 响应中返回 Enum 的值而不是 Spring Boot 中的名称
Posted
技术标签:
【中文标题】在 API 响应中返回 Enum 的值而不是 Spring Boot 中的名称【英文标题】:return Enum's value instead of the name in Spring boot in API response 【发布时间】:2020-04-12 23:23:05 【问题描述】:我有一个枚举定义如下:
public enum IntervalType
HOUR(3600),
DAY(3600*24),
WEEK(3600*24*7),
MONTH(3600*24*30);
public Integer value;
IntervalType()
IntervalType(Integer value)
this.value = value;
@JsonValue
public Integer toValue()
return this.value;
@JsonCreator
public static IntervalType getEnumFromValue(String value)
for (IntervalType intervalType : IntervalType.values())
if (intervalType.name().equals(value))
return intervalType;
throw new IllegalArgumentException();
@Override
public String toString()
return this.name();
我的响应类定义如下:
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class IntervalType
@JsonProperty("interval_type")
@Enumerated(EnumType.STRING)
private IntervalType intervalType;
我正在尝试使用响应实体从我的 Spring Boot 应用程序中返回它,它给出的是枚举的值而不是它的名称。
我需要做些什么来更改响应以使其具有名称而不是枚举的值?
【问题讨论】:
【参考方案1】:你必须添加一个以值作为参数的构造函数:
public enum IntervalType
HOUR(3600),
DAY(3600*24),
WEEK(3600*24*7),
MONTH(3600*24*30);
private int value;
...
private IntervalType(int value)
this.value = value;
public int getValue()
return this.value;
那么一般你这样称呼它:
System.out.println(IntervalType.DAY.getValue()); // -> 86400
System.out.println(IntervalType.DAY); // -> DAY
【讨论】:
【参考方案2】:如果您想要枚举的名称,请使用方法 name() 即:IntervalType.DAY.name()
/**
* Returns the name of this enum constant, exactly as declared in its
* enum declaration.
*
* <b>Most programmers should use the @link #toString method in
* preference to this one, as the toString method may return
* a more user-friendly name.</b> This method is designed primarily for
* use in specialized situations where correctness depends on getting the
* exact name, which will not vary from release to release.
*
* @return the name of this enum constant
*/
public final String name()
return name;
【讨论】:
以上是关于在 API 响应中返回 Enum 的值而不是 Spring Boot 中的名称的主要内容,如果未能解决你的问题,请参考以下文章
.str.contains 返回实际找到的值而不是 True 或 False
为啥 sklearn MinMaxScaler() 返回超出范围的值而不是错误?