问题描述
controller:
@PostMapping
public Result<Object> addUser(@RequestBody User user) {
boolean result = userService.save(user);
return result ? Result.succeed(null) : Result.fail("添加失败");
}
user:
@Data
@TableName("user_table")
public class User {
/**
* 编号 自增
*/
@TableId(type = IdType.AUTO)
private Integer uCode;
/**
* 名称
*/
private String uName;
/**
* 密码
*/
private String uPwd;
/**
* 类型 0:普通;1:管理员
*/
private Boolean uType;
/**
* 备注
*/
private String uMemo;
}
测试案例:
出现问题:
user 中的属性没有被赋值,而 json 中的字段名和 user 的属性名是一致的,说明在反序列化时字段名没有正确映射。
解决问题
默认情况下,Jackson 使用驼峰命名规则(Camel Case)来映射 JSON 字段到 Java 对象的属性。在驼峰命名规则下,JSON 字段名中的大写字母会被保留,不会转换为小写或添加下划线。
例如:uName
对应u_name
,而userName遵循驼峰命名规则,对应userName
。
如果字段名不遵守驼峰命名规则,那我们可以使用@JsonProperty
注解指定映射字段与属性的映射关系。
/**
* 编号 自增
*/
@TableId(type = IdType.AUTO)
@JsonProperty("uCode")
private Integer uCode;
...
建议
建议开发过程要遵循字段命名规则,Java 中使用驼峰命名,数据库表字段使用小写加下划线命名。