我们都知道@RequestBody后面可以接DTO也可以接map,但你不知道的是,接map有很多弊端,今天俺们就来聊聊这个问题。
例子:
@PostMapping("hello2")
public Map<String, Object> hello2(@RequestBody Map<String,Object>
Map<String, Object> result = new HashMap<>();
result.putAll(param);
return result;
}
返回结果:
从返回结果可以看出,我们参数传什么就返回什么。
弊端1:无法转换类型
无法转换类型。
我们看看如果是DTO,结果会是怎么样
@PostMapping("hello3")
public Map<String, Object> hello3(@RequestBody Users param) {
Map<String, Object> result = new HashMap<>();
result.put("param",param);
return result;
}
DTO:
@Data
public class Users {
private Long userId;
private String userName;
}
输出结果:
可以看到由于userId是Long,虽然我们的入参是字符类型,但是Jackson会帮我们转为Long类型。
弊端2:可读性差
这个很明显,map无法看出入参是什么。可读性差
弊端3:构造复杂需要手动解析
如果入参很复杂,则在编写代码的阶段就需要手动解析出复杂的结构,十分地费劲。
解析时,可能写错字段名。
弊端4:无法校验
如果是map,需要手动校验参数,DTO就可以使用@NotNull等注解校验了。