解决@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之后改成别的了
搞定!