SpringMVC中Controller层的接⼝的⼀些不同写法总结
0.前⾔
不同的⼈维护同⼀套代码,不同的代码习惯都能实现最后的功能,但是写法不⼀样。这篇⽂章总结⼀下在controller层常见的接⼝的⼀些写法。
<与@RequestMapping
⽤的⽐较多的是get。
最简单的写法:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/list")
public String list() {
return "sucess find all users";
}
@RequestMapping("/find")
public String find() {
return "find one";
}
}
这是⽐较基础的写法:
我们可以通过ip+端⼝+[项⽬名]+/user/list 来返回所有学⽣的列表。⽐如:
localhost:8080/xxx/user/list。
同理,下⽅find⽅法也是可以使⽤的
可以通过localhost:8080/xxx/user/find来执⾏另⼀个功能。
但是我们上⾯的⽅法没有指定⽅式,我们给它指定GET请求。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/list",method=RequestMethod.GET)
public String list() {
return "sucess find all users";
}
@RequestMapping(value="/find",method=RequestMethod.GET)
@ResponseBody
public String find() {
return "find one";
}
}
注:实际开发中,我们⼀般加上@ResponseBody,可理解为把 结果放⼊到HTTP response body 中(数据转换成json格式),便于前端处理数据。
<请求传参的⼏种⽅法
1.占位符
我们可以定义后台的接⼝配置占位符,通过配置的占位符来要求前端传递参数。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find/{id}/{name}",method=RequestMethod.GET)
@ResponseBody
public String find(@PathVariable(“id”) String id,
@PathVariable(“name”) String name) {
return “find one”;
}
}
RequestMapping中的value中有两个占位符,id和name,表⽰get请求中应该加⼊这两个参数的值,可以参考下⾯的写法来请求后台
localhost:8080/xxx/user/find/1001/zhangsan
2.RequestParam
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find",method=RequestMethod.GET)
springmvc的注解有哪些@ResponseBody
public String find(@RequestParam(“id”) String id,
@RequestParam(value=“name”,required=true) String name,
@RequestParam(value=“age”,required=false) String age) {
return “find one”;
}
}
像第⼀个id这种写法,get请求必须带这个参数。name这种写法,required为true,这种写法也必须带这个参数,⽽第三个age,可带可不带,那么下⾯两种写法都是对的。
localhost:8080/xxx/user/find?id=1001&name=zhangsan
localhost:8080/xxx/user/find?id=1001&name=zhangsan&age=11
你如果缺少了必填的参数,则会报错。
当然,对于RequestParam 还有更复杂更详细的⽤法,但是实际开发中⽤的不多,稍作了解。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find",method=RequestMethod.GET)
@ResponseBody
public String find((@RequestParam(defaultValue = “1”,required = false,/value = “ss”,/name = “iddddd”) String id) { return “find one”;
}
}
说明:
(1) @RequestParam,对于参数⼊参,这个注解可以不必须有,但只能匹配和你定义的⼊参,完全⼀样的名称,对应则匹配,不对应就不匹配。
(2)required ,是否必须,默认为 true,也就是说,当@RequestParam存在时,是默认required = true条件的,@RequestParam不存在时,返回 (1) 的解释。
(3)defaultValue ,设置初始值,⼀般和required = false⼀起使⽤,如果不传值,则使⽤默认值。
(4)value ,和name,⼀样,给变量起别名,⼀⼀对应于前端传的属性名,映射到后端接⼝变量名,有时前端⽆法按要求传给你你所希望的变量名,这个就发挥⽤处了。
(5)name ,和value⼀样,给变量起别名,两个同时存在时,访问时就会出错。
3.Param
个⼈⽤的最多,因为很⽅便,配合mybaits,需要的参数之间不传(就跟上⾯的required=false⼀样的效果)
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find",method=RequestMethod.GET)
@ResponseBody
public String find(@Param(“id”) String id,
@Param(“name”) String name,
@Param(“age”) String age) {
return “find one”;
}
}
这样写的好处就是不需要的参数不⽤写,需要什么就写什么,不传递的参数默认就是null,在mybatis中的if语句中直接加判断就可以,⽐较⽅便。
3.POST请求的⼏种写法
post请求的⼏种写法跟上⾯类似,只不过我们⼀般要加上@RequestBody。
⽐如下⾯这样
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find",method=RequestMethod.POST)
@ResponseBody
public String find(@RequestBody Student student) {
return “find one”;
}
}
请求参数⾥加⼊了RequestBody。那么你前端请求的时候就要构造⼀个和Student这个实体类⼀模⼀样的对象(字段名称必须⼀⼀对应,前台给的参数可以少不可以多)
注:实际开发中的增删改查⽤的⾮常多,你不⽤没考虑筛选哪些条件,直接从前台把对象映射到后台的实体类中,由mybaits判断筛选哪些字段,⼗分好⽤。像若以那种代码⽣成器就是这种⽅式。
当然,觉得实体类⿇烦怎么办,我们可以⽤JSONObject啊。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find",method=RequestMethod.POST)
@ResponseBody
public String find(@RequestBody JOSNObject student) {
return “find one”;
}
}
这样就可以按照⾃⼰喜好随意添加删除字段了。
除此之外,你还可以这么写:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/find",method=RequestMethod.POST)
@ResponseBody
public String find(@RequestBody JOSNObject student,
@Param(“id”) String id ) {
return “find one”;
}
}
也就是你在post请求的时候可以在URL中加参数,⽽且这个参数可有可⽆,那么你的请求可以这么写
let url= localhost:8080/xxx/user/find?id=1001
this.http.post(url,{data})
url中加了参数,data是post的内容,由后台的RequestBody接收。
当然,⽤的不多,⼀般在接⼝需要加参数的时候才会这么⼲,如果⼀开始设计的好话⼀般就不这么写了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论