SpringMVC中Controller层的接口的一些不同写法总结

原文链接:这里

0.前言
不同的人维护同一套代码,不同的代码习惯都能实现最后的功能,但是写法不一样。这篇文章总结一下在controller层常见的接口的一些写法。

1.get与@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格式),便于前端处理数据。

2.get请求传参的几种方法
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)
@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接收。

当然,用的不多,一般在接口需要加参数的时候才会这么干,如果一开始设计的好话一般就不这么写了。

你可能感兴趣的:(前端,java,json)