Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决spring控制器中绑定枚举的问题_Spring_Spring Boot_Spring Mvc - Fatal编程技术网

如何解决spring控制器中绑定枚举的问题

如何解决spring控制器中绑定枚举的问题,spring,spring-boot,spring-mvc,Spring,Spring Boot,Spring Mvc,当我使用commonparam通过spring执行一些公共逻辑时。我发现我无法使用枚举进行输入。与postman或其他类似。在JSON负载中,KeyTypeEnum的值应该是PHONE。按您期望的值1进行唯一解析是不可行的。您可以有多个具有相同值的枚举。为了解决这个问题,我尝试了很多方法。最后,感谢上帝,我成功了 这仅适用于RequestMethod.POST,并且您的参数必须是object(可能RequestMethod.GET或single param也可用。但我还没有找到如何做到这一点)

当我使用commonparam通过spring执行一些公共逻辑时。我发现我无法使用枚举进行输入。与postman或其他类似。

在JSON负载中,KeyTypeEnum的值应该是
PHONE
。按您期望的值
1
进行唯一解析是不可行的。您可以有多个具有相同值的枚举。

为了解决这个问题,我尝试了很多方法。最后,感谢上帝,我成功了

这仅适用于RequestMethod.POST,并且您的参数必须是object(可能RequestMethod.GET或single param也可用。但我还没有找到如何做到这一点)

例子 最后但并非最不重要 通过使用
@JsonCreator
我们可以确保像“1”(此代码是KeyTypeEnum已经定义的值)这样的输入可以成功转换为enum。
@JsonValue
确保spring可以成功获取“1”


为了得到正确的答案,你实际上需要问一个问题。你发布的内容看起来像问题中的问题答案。编辑您的问题以移动答案中的答案部分。谢谢。我已被移动@davidxxx@Forest10. 很好,这解释得很好。您有我的投票权。参数名称已限定应转换哪个枚举。我尝试了
电话
,但失败。你能展示一些示例代码吗?谢谢!
@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;
    }

}