我有一个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。
有人能帮忙吗?
暂无答案!
目前还没有任何答案,快来回答吧!