我想从客户端发送一个字符串,以将其转换为其各自的Enum值。
给出:
public enum TheEnum {
One,
Two
}
点击bindsToParams?boolVal=false&stringVal=foobar&enumVal=one
@Controller
//..
public void bindsToParams(
@RequestParam Boolean boolVal,
@RequestParam String stringVal,
@RequestParam TheEnum enumVal) {
// this works. enumVal created correctly
}
当枚举是DTO的属性,而传入的有效载荷是json时,我希望发生相同的枚举转换。因此,使用以下DTO:
public BagOfProps {
Boolean boolVal;
String stringVal;
TheEnum enumVal;
}
发送时:{"boolVal":false,"stringVal":"foobar",enumVal: "One"}
@Controller
//..
public void bindsToObject(
@RequestBody BagOfProps bag) {
// unmarshalling of boolVal, stringVal works
// but bag.enumVal is null
}
我该怎么办?
谢谢。
答案 0 :(得分:0)
发现了问题。
反序列化嵌套枚举实际上是开箱即用的。对我不起作用的原因是,在json有效负载中,enum属性的名称与DTO中变量的名称不同:
我正在发送:
{"boolVal":false,"stringVal":"foobar",enumVal: "One"}
DTO实际上是
public BagOfProps {
Boolean boolVal;
String stringVal;
TheEnum notTheSameNameAsEnumVal;
}
HTH