1. 前后端传递对象
当前端需要传给后端的数据较多,但参数又不是一个对象时;可以考虑将所有的参数封装成一个java对象;然后在前端使用ajax传值的话直接传递该对象就可以;后端使用 @RequestBody 来接收该对象
例如:
实体类对象
Class Person{
private String userName;
private String password;
//可以多写几个属性
getter and setter();
}
<script>
function a(){
var user={};
user.userName= $("#userName").val();
user.password= $("#password").val();
$.ajax({
type:'post',
url: url,
contentType:'application/json',
dataType:'json',
data: JSON.stringfy(user),
success:function(res){
}
})
}
</script>
此时注意: ajax请求 传递的时json对象; 而 @RequestBody 接收的时json字符串;
这个时候 contentType 和 dataType 和JSON.stringfy 是必须要有的,不然会报传输格式错;还有 前端设置对象的属性名必须与java实体类的属性名一致;
后端接收:
@RequestMapping("")
public String save( @RequestBody User user){
}
这样既可接收到数据;
2.前后端传递文件和其他数据
通常也会遇到既需要传递文件;又需要传递其他参数的情况;
当只传递文件的时候;我们通常就是 创建一个 formData 对象;将文件放到改对象里面;
当需要传递其他参数的时候;同理也可将 其他数据 以key -value 的形式存储到 formData中:
例如:
var formData = new FormData();
formData.append("file", layero.find('#file')[0].files[0]);
formData.append("userName",username);
formData.append("id",id);
后端接收:
@PostMapping("/importData")
@ResponseBody
public String importData(MultipartFile file, String userName, String id){}