本文主要是介绍【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、@RequestBody和@ResponseBody
@RequestBody (通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。实质上接受的是一个JSON的字符串)
1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded,可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
@ResponseBody
Controller层为控制视图层,当网页端一个请求发送到后台时,后台的控制视图层通过@RequestMapping映射相应的视图方法,如果在视图方法上用注解@ResponseBody标识后,方法执行完后返回的内容会返回到请求页面的body上,直接显示在网页上。示例如下
1、spring boot的启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(App.class);
ConfigurableApplicationContext context = app.run(args);
}
}
2、spring boot的控制视图层
@Controller
public class MyController {
/*响应http://127.0.0.1:8080/hello请求*/
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "hello world";
}
}
当启动启动类后,在浏览器中输入http://127.0.0.1:8080/hello时,控制视图层响应请求后,把“hello world”字符串返回到请求页面上。@ResponseBody注解的作用就是把控制视图方法返回的内容返回到请求页面上。
查看请求后页面的http://127.0.0.1:8080/hello源码
注意,请求前后的url不改变。通过请求后的页面可知,@ResponseBody注解把返回的字符串“hello world”放到了请求返回页面的<body></body> 标签中了。
2、@PathVariable注解的使用
XXXController包括了常用的Get、Post、Put、Delete请求,并使用注解的方式说明了请求路径
路径中的{id}元素是路径参数,可以通过@PathVariable注解获取,具体的参数获取与校验会在下一篇做介绍。
总结
SpringBoot提供的获取参数注解包括:@PathVariable,@RequestParam,@RequestBody,三者的区别如下表:
1.Get请求的参数可以通过@PathVariable和@RequestParam获取
@GetMapping("/orders/{id}")
public String getOrder(@PathVariable(value = "id")Integer id,
@RequestParam(value = "name")String name,
@RequestParam(value = "price",required = false,defaultValue = "0") Integer price)
2.Post使用@RequestBody注解将Json格式的参数自动绑定到Entity类
@PostMapping("/order/check")
public String checkOrder(@RequestBody Order order)
3.Post使用@RequestParam获取请求体中非Json格式的数据
@PostMapping("/order/checkmore")
public String checkMore(@RequestParam(value = "amount")Integer amount,
@RequestParam(value = "discount")float discount)
4.Post请求也可以直接与对象类绑定,但需要参数名一致,不支持json格式,只支持form-data和x-www.form-urlencoded格式
@PostMapping("/order/add")
public String addOrder(Order order)
5.Put请求可以直接与对象类绑定,但需要参数名一致
@PutMapping("/order/{id}/update")
public String updateOrder(@PathVariable(value = "id")Integer id,Order order)
注意点:
1.针对一些非必填的参数,可以使用required关键字来标识,同时必须设置默认值defaultValue,如getOrder方法中对price参数的获取:
(@RequestParam(value = "price",required = false,defaultValue = "0") Integer price)
2.参数可以直接与Entity类绑定,但不支持json格式,只支持form-data和x-www.form-urlencoded格式
@PostMapping("/order/add")
public String addOrder(Order order){
4.增删改查请求参数规范@PostMapping;@GetMapping;@PutMapping;@DeleteMapping
* 通过RestController注解告知SpringBoot这是一个控制器类
* 通过RequestMapping注解说明统一处理以user开头的URL请求
*/
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 获取特定用户
* @param id
* @return
*/
@GetMapping("/users/{id}")
public User getUser(@PathVariable(value="id") Integer id){
return null;
}
/**
* 添加用户
* @param user
* @return
*/
@PostMapping("/add")
public String addUser(@RequestBody User user){
return "添加成功";
}
/**
* 修改用户
* @param id
* @param user
* @return
*/
@PutMapping("/users/{id}/update")
public String updateUser(@PathVariable(value="id") Integer id,@RequestBody User user){
return "修改成功";
}
/**
* 删除用户
* @param id
* @return
*/
@DeleteMapping("/users/{id}/delete")
public String deleteUser(@PathVariable(value="id") Integer id){
return "删除成功";
}
}
这篇关于【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!