springbootjsoncreator只对requestbody中的一个枚举起作用

nnvyjq4y  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(209)

我有一个post请求的终结点:

@PostMapping("")
public ResponseEntity<MyResponse> myEndpoint(@Valid @RequestBody MyRequest myRequest) {
    ...
}

我有一个请求类:

public class MyRequest {

    @NotNull
    private Color color;

    @NotNull
    private Period period;

}

我用json creator的枚举颜色:

public enum Color {

    RED("FF2525"),
    GREEN("25FF25"),
    BLUE("2525FF");

    private final String hexcode;

    private Color(String hexcode) {
        this.hexcode = hexcode;
    }

    public String getHexcode() {
        return hexcode;
    }

    @JsonCreator
    public static Color fromColor(String color) {
        for (Color c : Color.values()) {
            if (c.toString().equals(color)) {
                return c;
            }
        }
        return null;
    }

}

以及json创建者的枚举周期:

public enum Period {

    HOUR("Hour"),
    DAY("Day"),
    WEEK("Week");

    private final String name;

    private Period(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @JsonCreator
    public static Period fromPeriod(String period) {
        for (Period p : Period.values()) {
            if (p.toString().equals(period)) {
                return p;
            }
        }
        return null;
    }

}

如果我发送一个请求,其中句点是一个字符串,颜色是一个枚举,所有的工作。调试器进入颜色枚举的fromcolor方法并返回正确的枚举。

{
  "period":"HOUR",
  "color":{
    "color":"GREEN",
    "hexcode":"25FF25"
  }
}

现在我不想在文章中以字符串形式发送句点,也不想进行枚举:

{
  "period":{
    "period":"HOUR",
    "name":"Hour",
    "begin":"2021-04-07T15:00:00.000+00:00",
    "end":"2021-04-07T15:59:59.999+00:00"
  },
  "color":{
    "color":"RED",
    "hexcode":"FF2525"
  }
}

现在调试器在fromperiod方法中步进到时间,但在fromcolor方法中没有时间。在第一次运行中,输入字符串为null,我得到一个null,在第二次运行中,输入字符串为hour,得到hour枚举。color为null,spring抛出验证错误,因为@notnull为。
我不明白为什么只有当json中没有其他enum时,color才能被解析为enum。
有人能帮忙吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题