当我使用通用参数通过使用spring做一些通用逻辑时。我发现我不能用枚举输入。像邮递员或其他人。
答案 0 :(得分:1)
为了解决这个问题,我尝试了很多方法。最后,感谢上帝。我成功了。
这仅适用于RequestMethod.POST。并且您的参数必须是对象(也许也可以使用RequestMethod.GET或单个参数。但我还没有找到如何实现的方法)
@Data
@Builder
@AllArgsConstructor
@RequiredArgsConstructor
public class CommonParam implements Serializable {
/**
*
*/
@Size(min = 1, max = CommonConstants.MAX_PARTITION_SIZE)
private List<String> texts;
/**
*
*/
@NotNull
private KeyTypeEnum keyTypeEnum;
}
@PostMapping("/do")
public RpcResult do(@RequestBody @Valid CommonParam commonParam) {
.....
}
public enum KeyTypeEnum {
/**
* 手机号
*/
PHONE(1, "phone");
private int value;
private String desc;
KeyTypeEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public static KeyTypeEnum getByDesc(String desc) {
for (KeyTypeEnum b : KeyTypeEnum.values()) {
if (b.getDesc()
.equals(desc)) {
return b;
}
}
return null;
}
@JsonCreator
public static KeyTypeEnum getByValue(int value) {
for (KeyTypeEnum b : KeyTypeEnum.values()) {
if (Objects.equals(b.getValue(), value)) {
return b;
}
}
return null;
}
@JsonValue
public int getValue() {
return value;
}
public String getDesc() {
return desc;
}
}
通过使用@JsonCreator
,我们可以确保像'1'这样的输入(此代码是KeyTypeEnum已经定义的值)可以成功转换为枚举。
@JsonValue
确保春季成功获得“ 1”。
答案 1 :(得分:0)
在JSON有效负载中,KeyTypeEnum的值应为PHONE
。正如您期望的那样,用值1
来唯一地解析是不可行的。您可以有多个具有相同值的枚举。