如何将POST传递进来的参数当作是实体类中的ENUM属性呢?

例如有实体类Demo

@Data
public class Demo {
    private String id;
    private String value;
    private Level level;

    public enum Level {
        LOW,
        MEDIUM,
        HIGH
    }
}

又有POST请求:

### Send POST request with json body
POST http://localhost:18443/post-json
Content-Type: application/json

{
  "id": 999,
  "value": "content",
  "level": "LOW"
}

如何将 "level": "LOW" 赋值给 Demo 呢?

可以使用 ENUMvalueOf方法,详情如下:

    @PostMapping("/post-json")
    public void index1(@RequestBody Map<String,String> content) {
        Demo demo = new Demo();
        demo.setId(content.get("id"));
        demo.setValue(content.get("value"));
        demo.setLevel(Demo.Level.valueOf(content.get("level")));
        System.out.println(demo);
    }

使用valueOf方法将参数中的相应值当作ENUM

但是有时候POST传过来的不一定是Demo.Level所期望的值,所以用 try...catch包裹异常:

    @PostMapping("/post-json")
    public String index1(@RequestBody Map<String,String> content) {
        Demo demo = new Demo();
        demo.setId(content.get("id"));
        demo.setValue(content.get("value"));
        try {
            demo.setLevel(Demo.Level.valueOf(content.get("level")));
        } catch (IllegalArgumentException e) {
            return "Not a valid level: " + content.get("level");
        }

        return demo.toString();
    }

顺便把返回结果传给前端。


参考资料:
Spring MVC - Mapping Query Parameters To Enum

标签: none

评论已关闭