Controller层接收各种参数和⽂件
在构建⼀个系统时,前端和后台总是需要对接,在springmvc架构⾥,这种对接⼀般发⽣在Controller层中。⽅法参数绑定⾸先⽀持Java 所有基本类型(包括: byte、short、int、long、float、double、char、string、boolean),以及基本类型对应封装⾼级类(包括:StringBuilder、StringBuffer),也包含 了我们⾃⼰定义的各种JavaBean类型。接受的⽅式有很多,但是也要在接受数据时也要体现⾯向对象的思想。
⼀、简单传⼊
以⽤户登陆为例,在前台传⼊数据,做⼀个传⼊的例⼦。
前台传⼊数据的形式为 username=10&password=10
<html>
<head>
<script src="cdn.bootcss/jquery/3.3.1/jquery.js"></script>
<script>
//简单形式的传参
$.ajax({
type: "POST",
url: "localhost:8080/test/requesetParamGet",
contentType: "application/x-www-form-urlencoded",
data:"username=10&password=10",
dataType: "json",
success: function (result) {
if (de == 0) {
console.log(result)
} else {
}
}
});
</script>
</head>
</html>
在这种情况下,如何在后台进⾏接受呢?可以采⽤如下的⽅法。
@ResponseBody
@RequestMapping("/simple")
public R list(String name,String age){
System.out.println("name:"+name+",age:"+age);
return R.ok();
}
当然也可以采⽤HttpServeletRequest的形式进⾏接受
@ResponseBody
@RequestMapping("/simple")
public R requestGet(HttpServletRequest request){
System.out.println("reqname:"+Parameter("name")+",reqage:"+Parameter("age"));
return R.ok();
}
⼆、以json对象的形式传⼊
还是以⽤户登陆为例,在前台传⼊数据,做⼀个传⼊的例⼦。
<script src="cdn.bootcss/jquery/3.3.1/jquery.js"></script>
<script>
//class获取,需要⽤对象的形式
var s={
name:'liMin',
age:'10'
}
$.ajax({
type: "POST",
url: "localhost:8080/test/classGet",
contentType: "application/json",
data:JSON.stringify(s),
dataType: "json",
success: function (result) {
if (de == 0) {
console.log(result)
} else {
}
}
});
</script>
这种情况下,controller层建议使⽤对象的形式进⾏接受。
@ResponseBody
@RequestMapping("/classGet")
public R classGet(@RequestBody TestEntity testEntity){
System.out.println("className:"+Name()+"classAge:"+Age());
return R.ok();
}
在传参时,需要添加注解@RequsetBody⽤来接收contentType为application/json的传⼊对象。如果传过来的时contentType头为application/x-www-form-urlencoded,那么建议使⽤另外⼀个注解接受@RequestParam来接受。
@RequestMapping("/requesetParamGet")
public R addUser6(@RequestParam("username") String username,@RequestParam("password") String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return R.ok();
}
如果啥都不写,那么就得不到这个对象,接受到的对象为NULL。
当然,你可以不接受为⼀个对象,可以把传过来的json对象转化为json字符串,然后⽤各种⼯具进⾏解析,也是可以的。当然也是要加上@RequestBody或者@RequestParam的。
@ResponseBody
@RequestMapping("/stringGet")
public R stringGet(@RequestBody String string){
System.out.println("String:"+string);
return R.ok();
}
三、⽂件传输
在项⽬中,⽂件上传有别于对象的上传。
<html>
<head>
<script src="cdn.bootcss/jquery/3.3.1/jquery.js"></script>
<script>
function savePic(){
var formData = new FormData($( "#uploadPic" )[0]);
var ajaxUrl = "localhost:8080/test/fileUpload";
//alert(ajaxUrl);
/
/$('#uploadPic').serialize() ⽆法序列化⼆进制⽂件,这⾥采⽤formData上传
//需要浏览器⽀持:Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。 $.ajax({
type: "POST",
//dataType: "text",
url: ajaxUrl,
data: formData,
//async: false,
//cache: false,
contentType: false, //上传⽂件
processData: false,//序列化处理,默认为true,上传⽂件需要改成false
success: function (data) {
alert(data);
},
error: function(data) {
alert("error:"+sponseText);
}
});
return false;
}
function jiance(){
var formData = new FormData();
formData.append()
}
</script>
</head>
<body>
<form id="uploadPic" action="" enctype="multipart/form-data">
<input type="file" name="multipartFile" id="file">
<a href="javascript:savePic();" class="btn green"> 提交 </a>
<a href="javascript:jiance();" class="btn green"> jiance </a>
</form>
</body>
</html>
在后台接受参数的例⼦:
@RequestMapping("/fileUpload")
@ResponseBody
public R upload(MultipartFile multipartFile){
String filePath="";
if(!multipartFile.isEmpty()){
System.out.OriginalFilename());
}
return R.ok().put("filePath",filePath);
}
@RequestMapping("/fileUpload2")
@ResponseBody
public R upload2(@RequestParam("multipartFile") MultipartFile multipartFile){
String filePath="";
if(!multipartFile.isEmpty()){
System.out.OriginalFilename());
}
return R.ok().put("filePath",filePath);jquery ajax例子
}
@RequestMapping("/fileUpload3")
@ResponseBody
public R upload3(@RequestBody MultipartFile multipartFile){
String filePath="";
if(!multipartFile.isEmpty()){
System.out.OriginalFilename());
}
return R.ok().put("filePath",filePath);
}
这⾥需要注意⼀点,⽂件名必须和参数名保持⼀致,在本项⽬中file⽂件的名字必须为multipartFile。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论