SpringMVC-请求和响应

文章目录

  • [1. 获取请求参数](#1. 获取请求参数)
  • [2. 响应数据](#2. 响应数据)
  • [3. REST风格](#3. REST风格)

1. 获取请求参数

  1. 简单类型参数:设置方法形参的名称与请求参数名称相同,SpringMVC会自动将请求参数复制给相应的方法形参。

    java 复制代码
    //请求路径:http://localhost:8080/simpleParam?name=Tom&age=20
    @RestController
    public class RequestController {
        @RequestMapping("/simpleParam")
        public String simpleParam(String name , Integer age ){
            System.out.println(username + "  :  " + age);
            return "OK";
        }
    }

    当方法形参名称与请求参数名称不一致时可以使用@RequestParam注解完成映射。

    java 复制代码
    //请求路径:http://localhost:8080/simpleParam?name=Tom&age=20
    @RestController
    public class RequestController {
        @RequestMapping("/simpleParam")
        public String simpleParam(String @RequestParam(name) username , Integer age ){
            System.out.println(username + "  :  " + age);
            return "OK";
        }
    }

    @RequestParam注解共包含四个属性如下所示:

    1. name:请求中的参数名,与value等价。
    2. value:请求中的参数名,与name等价。
    3. required:请求参数是否必须,默认为true。
    4. defaultValue:请求参数的默认值,该如果配置该属性会使required属性自动设置为false。
  2. 实体参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数。

    如果是嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。

    java 复制代码
    @Data
    public class User {
        private String name;
        private Integer age;
        private Address address;
    }
    
    @Data
    public class Address {
        private String province;
        private String city;
    }    
    java 复制代码
    //请求路径:http://localhost:8080/simplePojo?name=Tom&age=20&address.province=FuJian&address.city=Fuzhou
    @RestController
    public class RequestController {
        @RequestMapping("/simplePojo")
        public String simplePojo(User user){
            System.out.println("user:" + user);
            return "OK";
        }
    }
  3. 数据参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。

    java 复制代码
    //请求路径:http://localhost:8080/arrayParam?hobby=basketball&hobby=football&hobby=eat
    @RestController
    public class RequestController {
        @RequestMapping("/arrayParam")
        public String arrayParam(String[] hobbby){
            System.out.println(Arrays.toString(hobby));
            return "OK";
        }
    }
  4. 集合参数:求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系。

    java 复制代码
    //请求路径:http://localhost:8080/collectionParam?hobby=basketball,football,eat
    @RestController
    public class RequestController {
        @RequestMapping("/collectionParam")
        public String collectionParam(@RequestParam List<String> hobbby){
            System.out.println(hobby);
            return "OK";
        }
    }
  5. Json参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody标识。

    java 复制代码
    @RestController
    public class RequestController {
        @RequestMapping("/jsonParam")
        public String jsonParam(@RequestBody User user){
            System.out.println(user);
            return "OK";
        }
    }
  6. 日期参数:@DateTimeFormat注解的pattern属性中指定了哪种日期格式,前端的日期参数就必须按照指定的格式传递。

    后端controller方法中,需要使用Date类型或LocalDateTime类型,来封装传递的参数。

    java 复制代码
    //请求路径:http://localhost:8080/dateParam?updateTime=2020-10-10 10:10:10
    @RestController
    public class RequestController {
       @RequestMapping("/dateParam")
        public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
            System.out.println(updateTime);
            return "OK";
        }
    }
  7. 路径参数:使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数。

    java 复制代码
    //请求路径:http://localhost:8080/path/1/cxk
    @RestController
    public class RequestController {
        //路径参数
        @RequestMapping("/path/{id}/{name}")
        public String pathParam2(@PathVariable Integer id, @PathVariable String name){
            System.out.println(id+ " : " +name);
            return "OK";
        }
    }

2. 响应数据

名称 @ResponseBody
类型 方法\类注解
位置 SpringMVC控制器方法定义上方和控制类上
作用 设置当前控制器返回值作为响应体, 写在类上,该类的所有方法都有该注解功能
相关属性 pattern:指定日期时间格式字符串

说明:

  • 该注解可以写在类上或者方法上
  • 写在类上就是该类下的所有方法都有@ReponseBody功能:@RestController = @Controller + @ResponseBody
  • 当方法上有@ReponseBody注解后
    • 方法的返回值为字符串,会将其作为文本内容直接响应给前端
    • 方法的返回值为对象,会将对象转换成JSON响应给前端

3. REST风格

  • REST(Representational State Transfer)表现形式状态转换 ,它是一种软件架构风格,它充分利用HTTP协议的特性,为我们规定了一套统一的资源获取方式,以实现不同终端之间(客户端与服务端)的数据访问与交互。

  • REST风格:根据REST风格对资源进行访问称为RESTful,通过URL定位要操作的资源,通过HTTP动词(请求方式)来描述具体的操作。在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。

    • GET : 查询
    • POST :新增
    • PUT :修改
    • DELETE :删除
  • 下述示例代码分别展示采用REST风格对用户资源进行增删改查。

    java 复制代码
    @RestController("/users")
    public class UserController {
    	@Autowired
        privite UserService userService;
        
        //1.根据id查询某个用户 
        @GetMapping("/{id}")
        public ResulutBean getById(@PathVariable Integer id) {
            return ResulutBean.success(userService.getById(id));
        }
        
        //2.新增用户
        @PostMapping
        public ResulutBean save(@RequestBody User user) {
            return ResulutBean.success(userService.save(user));
        }
        
        //3.删除用户
       	@DeletMapping("/{id}")
        public ResulutBean delete(@PathVariable Integer id) {
            return ResulutBean.success(userService.deleteById(id));
        }
        
            //3.修改用户
       	@PostMapping
        public ResulutBean delete(@RequestBody User user) {
            return ResulutBean.success(userService.update(user));
        }
    }
  • 注意事项:

    1. 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books。
    2. 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值。
相关推荐
架构文摘JGWZ20 分钟前
不用 Tomcat?SpringBoot 项目用啥代替?
java·spring boot·tomcat
网安墨雨1 小时前
网络安全之命令
java·运维·web安全
sd21315121 小时前
springboot3 spring security+jwt实现接口权限验证实现
java·后端·spring
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题07 】 东方通TongWeb替代Tomcat的实战指南!
java·tomcat
局外人_Jia1 小时前
Tomcat 新手入门指南
java·tomcat
Dreamboat-L1 小时前
手写Tomcat
java·tomcat
出门撞大运1 小时前
手写一个简易版的tomcat
java·tomcat
A阳俊yi1 小时前
SpringMVC中有关请求参数的问题(映射路径,传递不同的参数)
java·前端·javascript
qq_447663051 小时前
《Spring日志整合与注入技术:从入门到精通》
java·开发语言·后端·spring
晴天Y281 小时前
tomcat应用的作用以及安装,以及tomcat软件的开机自启动。
java·tomcat