Spring MVC:将DTO中的json属性转换为Enum

时间:2019-05-28 07:05:27

标签: json spring-mvc unmarshalling

我想从客户端发送一个字符串,以将其转换为其各自的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
}

我该怎么办?

谢谢。

1 个答案:

答案 0 :(得分:0)

发现了问题。

反序列化嵌套枚举实际上是开箱即用的。对我不起作用的原因是,在json有效负载中,enum属性的名称与DTO中变量的名称不同:

我正在发送:

{"boolVal":false,"stringVal":"foobar",enumVal: "One"}

DTO实际上是

public BagOfProps {
    Boolean boolVal;
    String stringVal;
    TheEnum notTheSameNameAsEnumVal;
}

HTH