搜索 | 会员  
@RequestBody和@ResponseBody以及@PathVariabl
来源: CSDN   作者:网友  日期:2019-8-13  类别:编程语言  主题:JAVA  编辑:edoctor0804
@RequestBody(通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。实质上接受的是一个JSON的字符串)

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

image.png

* 通过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 "删除成功";

     }

 }

德仔网尊重行业规范,每篇文章都注明有明确的作者和来源;德仔网的原创文章,请转载时务必注明文章作者和来源:德仔网;
头条那些事
大家在关注
我们的推荐
也许感兴趣的
干货
了解一下吧