测试代码:
@PostMapping()
public void test(@RequestBody Student student){
System.out.println(student.getLover().name());
}
class Student{
private Lover lover;
public Lover getLover() {
return lover;
}
public void setLover(Lover lover) {
this.lover = lover;
}
enum Lover{
BASKET_BALL(1,"basket"),
PINGPONG(2,"ping_pong"),
YUMAO(3,"yu_mao");
private int code;
private String value;
Lover(int code,String value){
this.code=code;
this.value=value;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public static Lover valueOfCode(int code) {
for (Lover lover : Lover.values()) {
if(lover.code==code){
return lover;
}
}
return null;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
测试数据1:
//传入数据
{
"lover":"BASKET_BALL"
}
//输出结果
BASKET_BALL
测试数据2:
//传入数据
{
"lover":1
}
//输出结果
PINGPONG
更改Student的setLover方法
public void setLover(int code) {
this.lover=Lover.valueOfCode(code);
}
测试数据3:
//传入数据
{
"lover":1
}
//输出结果
BASKET_BALL
得出sprngboot接收枚举值的结论:
它首先会根据实体类中属性判断,如果是枚举类型,就用传入的json数据中的数据和当前属性的set方法匹配
如果类型相同则直接调用set方法复制
如果传入类型和set类型不同,并set类型是枚举,则先把json数据的值转为枚举,转为枚举过程中通过ENUM.name()方法匹配,如果没有匹配到,并且传入的值为int类型,测匹配当前枚举的顺序返回。
根据其源码探索原理证明结论:
在这里插入代码片