form表单数据通过@RequestBody解析成java实体类的实现过程
更新时间:2025年12月01日 09:17:36 作者:酱油不配拉鸡
解决@RequestBody请求无法接收前端数据问题:前端通过axios提交数据,后端使用fastJSON解析时出现NULL,通过在实体类上添加@JSONField注解指定属性对应关系,可以成功接收数据
解决@RequestBody 请求无法接收前端数据问题
最近写一个前后端分离的项目,前端提交一个form表格想直接作为后端对象接收,结果一直返回NULL给后台
后端controller代码如下
@PostMapping("/user")
public Result<?> save(@RequestBody User user){
System.out.println(user.toString());
return Result.success();
}
entity类代码如下
通过按照以往代码通过fastJSON解析前端下划线为驼峰命名
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
@JSONType(naming = PropertyNamingStrategy.SnakeCase)
public class User {
@TableId
private String uId;
private String uUsername;
private String uPassword;
private String uPow;
}
前端通过axios提交数据
methods:{
research(){
axios.post("/api/user",this.search)
},
}
结果死活数据过不来,看了好多方法,从跨域到axios写法排除最后到格式问题,就算前后端数据长一个样数据都过不来
最后发现如果指定了JSON属性的对应关系后就能够顺利接收到数据了,实体类加上注释:
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
@JSONType(naming = PropertyNamingStrategy.SnakeCase)
public class User {
@TableId
@JsonProperty(value = "uId")
private String uId;
@JsonProperty(value = "uUsername")
private String uUsername;
@JsonProperty(value = "uPassword")
private String uPassword;
@JsonProperty(value = "uPow")
private String uPow;
}
但是每个实体类都要加舒适有点蠢,虽然可以但是我不接受
突然想到可以用@RequsetBody传String类型然后解析成java实体类就好了
哦吼
fastJSON解析一下舒服
@PostMapping("/user")
public Result<?> save(@RequestBody String user){
User user1 = JSONObject.parseObject(user, User.class);
System.out.println(user1.toString());
return Result.success();
}
前端一般喜欢下划线命名,后端则喜欢驼峰命名,那么加上这一行注解就能解决问题
@JSONType(naming = PropertyNamingStrategy.SnakeCase)
但是好像fastJSON version1.2.75之后改成别的了
总结
搞定!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。


最新评论