针对枚举验证JSON字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了针对枚举验证JSON字段相关的知识,希望对你有一定的参考价值。
我正在使用POJO
直接从收到的JSON
构建我的Jackson's ObjectMapper
。为此,我使用@JsonProperty
注释注释我的字段(在这种情况下字段是抽象方法,因为我使用AutoValue来减少样板)。
现在,我的POJO中的一些字段是enums
,其中JSON显然包含常规字符串。我想以某种方式验证那些JSON字段确实在构造对象之前提交给给定的枚举类型。
这是一个例子。
@JsonProperty(value = "messageType")
public abstract Optional<MessageType> messageType();
此属性的类型为enum MessageType
,相应的JSON字段为ie。 “messageType”:“A_1”是一个字符串。
现在,如果“messageType”类似于“blabla”,我希望验证失败。
有没有办法使用Hibernate Validator进行注释验证?
答案
@JsonProperty(value =“messageType”)public abstract可选的messageType();
假设你有,MessageType为enum,具有不同的值A_1,A_2 ......
创建一个静态实用程序方法,以根据接收/发送的json值序列化/反序列化枚举值
public static <T extends Enum<T>> T getEnumFromJson(Class<T> enumClass, String value)
{
if(enumClass == null) throw new IllegalArgumentException("EnumClass value can't be null");
for(Enum<?> enumValue : enumClass.getEnumConstants()){
if(enumValue.toString().equalsIgnoreCase(value)){
return (T) enumValue;
}
}
//Validation message construct to give more meaningful details to end-user
StringBuilder erroMsg = new StringBuilder();
boolean bFirst = true;
for(Enum<?> enumValue : enumClass.getEnumConstants()) {
errorMessage.append(bFirst ? "": ", ").append(enumValue);
bFirst = false;
}
throw new IllegalArgumentException(value + " is invalid value, Supported value are "+ errorMessage);
}
//Enum as represented below
public enum MessageType {
A_1,
A_2,
A_3
@JsonCreator
public static MessageType fromValue(String value){
return getEnumFromJson(MessageType.class, value);
}
@JsonValue
public String toJson(){
return name().toLowerCase();
}
}
以上是关于针对枚举验证JSON字段的主要内容,如果未能解决你的问题,请参考以下文章
想必大家在做参数验证的时候,都会遇到一个问题,就是如何验证枚举? 自定义annotation 自定义Validator
具有枚举值的映射的 Dart json_serializable defaultValue