Springcloud学习笔记09-常⽤注解01@PostMapping、
@GetMapp。。。
1.1 @PostMapping、@GetMapping、@RequestMapping、@RestController、@ResponseBody、
@RequestParam、@RequestPart、@PutMapping
(1)@RequestMapping
@RequestMapping如果没有指定请求⽅式,将接收Get、Post、Head、Options等所有的请求⽅式.
(2)@GetMapping
@GetMapping是⼀个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到特定的处理⽅法上。
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段⼀⼀对应,在URL中可以看到。
get是从服务器上获取数据。
若符合下列任⼀情况,则⽤GET⽅法:
* 请求是为了查资源,HTML表单数据仅⽤来帮助搜索。
* 请求结果⽆持续性的副作⽤。
* 收集的数据及HTML表单内的输⼊字段名称的总长不超过1024个字符。
(3)@PostMapping
@PostMapping是⼀个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
get⽅式的安全性较Post⽅式要差些,包含机密信息的话,建议⽤Post数据提交⽅式;
post是向服务器传送数据。
若符合下列任⼀情况,则⽤POST⽅法:
* 请求的结果有持续性的副作⽤,例如,数据库内添加新的数据⾏。
* 若使⽤GET⽅法,则表单上收集的数据可能让URL过长。
* 要传送的数据不是采⽤7位的ASCII编码。
(4)@requestBody(后端⽅法接收请求体)
@requestBody注解常⽤来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,⽐如说:application/json或者是application/xml等。⼀般情况下来说常⽤其来处理application/json类型。
@RequestBody主要⽤来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);
后端代码接收测试截图:
(5)@RequestParam(后端⽅法接收请求参数)
@RequestParam有三个配置参数:
required表⽰是否必须,默认为true,必须。
defaultValue可设置请求参数的默认值。
value为接收url的参数名(相当于key值)。
@RequestParam也可⽤于其它类型的请求,例如:POST、DELETE等请求。
springcloud难学吗@RequestParam接收参数,要求postman以表单的格式发送数据(即使⽤form-data)
(6)@RequestPart
@RequestPart这个注解⽤在multipart/form-data表单提交请求的⽅法上。多⽤于⽂件上传场景。
前台请求:
jsonData为Person对象的json字符串
uploadFile为上传的图⽚
(7)@PutMapping
和PostMapping作⽤等同,都是⽤来向服务器提交信息。如果是添加信息,倾向于⽤@PostMapping,如果是更新信息,倾向于⽤
@PutMapping。两者差别不是很明显。
(8)@RestController
@RestController = @Controller + @ResponseBody组成,等号右边两位同志简单介绍两句,就明⽩我们@RestController的意义了:@Controller 将当前修饰的类注⼊SpringBoot IOC容器,使得从该类所在的项⽬跑起来的过程中,这个类就被实例化。当然也有语义化的作⽤,即代表该类是充当Controller的作⽤
@ResponseBody 它的作⽤简短截说就是指该类中所有的API接⼝返回的数据,甭管你对应的⽅法返回Map或是其他Object,它会以Json字符串的形式返回给客户端,本⼈尝试了⼀下,如果返回的是String类型,则仍然是String。
总之,⽤@Controller,返回的是页⾯;@Controller加上@ResponseBody,返回的是JSON、XML或其他⽂本。
⽤@RestController,意味着这个Controller的所有⽅法上⾯都加了@ResponseBody,不论你在每个⽅法前加、或不加@ResponseBody,都⼀样。所以这种Controller不会返回页⾯。
@Controller
@RequestMapping("/test")
public class MyController1 {
@ResponseBody
@GetMapping(path="/get1", produces = "text/plain;charset=utf-8")
public String getMethod1(String str) {
return str;
}
@GetMapping(path="/get2", produces = "text/plain;charset=utf-8")
public String getMethod2(String str) {
return str;
}
}
访问 /test/get1,并携带参数 str="index" ,返回 index 字符串。
访问 /test/get2,并携带参数 str="index" ,返回名为 index 页⾯,如index.jsp。
1.2 案例分析
案例⼀:
bank.ller;
bank.ity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@Api("⽤户信息管理")
@RestController
@RequestMapping("/user/*")
public class UserController {
private final static List<User> userList = new ArrayList<>();
{
userList.add(new User(1, "Tom", "A fool cat"));
userList.add(new User(2, "Jerry", "A clever mouse"));
}
@ApiOperation("获取⽤户列表")
@GetMapping("list")
public List userList() {
return userList;
}
@ApiOperation("新增⽤户")
@PostMapping("add")
public boolean add(User user) {
return userList.add(user);
}
@ApiOperation("更新⽤户")
@ApiImplicitParam(name = "user", value = "单个⽤户信息", dataType = "User")
@PutMapping("update")
public boolean update(User user) {
ve(user) && userList.add(user);
}
@ApiOperation("批量删除⽤户")
@ApiImplicitParam(name = "users", value = "N个⽤户信息", dataType = "List<User>")
@DeleteMapping("delete")
public boolean delete(@RequestBody List<User> users) {
veAll(users);
}
}
案例⼆:
通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
$.ajax({
url:"/login",
type:"POST",
data:'{"userName":"admin","pwd","admin123"}',
content-type:"application/json charset=utf-8",
success:function(data){
alert("request success ! ");
}
});
@requestMapping("/login")
public void login(@requestBody String userName,@requestBody String pwd){
System.out.println(userName+" :"+pwd);
}
这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有⼀个User类,拥有如下字段:
String userName;
String pwd;
那么上述参数可以改为以下形式:@requestBody User user这种形式会将JSON字符串中的值赋予user中对应的属性上需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论