SpringMVC (发送请求——>参数传递—— >响应数据)

设置请求访问路径

@RequestMapper :将请求访问路径和我们业务层的方法联系起来

@ResponseBody :将我们业务层方法的返回值转化为json,xml或其他格式的数据返回给页面

两种请求

get请求

post请求

测试案例

java 复制代码
    @RequestMapping("/getNameAndAge")
    @ResponseBody
    public String getNameAndAge(String name,int age){
        System.out.println("name:"+name);
        System.out.println("age:"+age);
        return "{'info':'Param'}";
    }

get

post

postman中 勾选Body下的x-www-form-urlencoded表单填写参数

解决post请求中文乱码问题

java 复制代码
//解决post请求中文乱码
@Override
protected Filter[] getServletFilters() {
    CharacterEncodingFilter filter=new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    return new Filter[]{filter};
}

5种参数类型传递

普通参数

方法
java 复制代码
    //普通参数
    @RequestMapping("/getNormalParam")
    @ResponseBody
    //将请求参数中的name赋给这里的形参userName
    public String getNormalParam(@RequestParam("name") String userName, int password){
        System.out.println("userName:"+userName);
        System.out.println("password:"+password);
        return "{'info':'normalParam'}";
    }

用@RequestParam注解让和形参不同名的参数对应起来

请求

结果

POJO参数

User实体类

java 复制代码
@Data
public class User {
    public String userName;
    public int password;
}
方法
java 复制代码
    @RequestMapping("/getPOJO")
    @ResponseBody
    public String getPOJO(User user){
        System.out.println(user);
        return "{'info':'pojo'}";
    }

请求

这里传递的参数要和实例类中的属性名保持一致

结果

嵌套POJO参数

User实体类,嵌套Address

java 复制代码
@Data
public class User {
    public String userName;
    public int password;
    
    public Address address;
}
java 复制代码
@Data
public class Address {
    public String province;
    public String city;
}
方法
java 复制代码
    @RequestMapping("/getContainPOJO")
    @ResponseBody
    public String getContainPOJO(User user){
        System.out.println(user);
        return "{'info':'containPojo'}";
    }

请求

结果

数组参数

方法
java 复制代码
    @RequestMapping("/getList")
    @ResponseBody
    public String getList(String[] list){
        System.out.println(Arrays.toString(list));
        return "{'info':'list'}";
    }

请求

结果

集合参数

方法
java 复制代码
    @RequestMapping("/getCollection")
    @ResponseBody
    public String getList(@RequestParam("list") List<String> foodList){
        System.out.println(foodList.toString());
        return "{'info':'collection'}";
    }

需要添加一个@RequestParam注解让SpringMVC知道这是传进来的参数,否则会把List<String>当成一个实体类

请求

结果

json数据传递

首先先导入json的依赖jar包

开启@EnableWebMvc

java 复制代码
@Configuration
@ComponentScan({"com.example"})
@EnableWebMvc//开启json等一系列功能
public class SpringMVCConfig {
}

postman中发送json数据(在Body中以raw的形式填写json数据)

方法中用@RequestBody来把请求体Body中的json绑定到我们业务层方法的形参上,且这个注解一个方法只能用一次。

json数组

方法
java 复制代码
    //json数组
    @RequestMapping("/getJsonList")
    @ResponseBody
    public String getJsonList(@RequestBody List<String> jsonList){
        System.out.println(jsonList);
        return "{'info':'jsonList'}";
    }

请求

结果

json对象

方法
java 复制代码
    //json对象
    @RequestMapping("/getJsonPOJO")
    @ResponseBody
    public String getJsonPOJO(@RequestBody User user){
        System.out.println(user);
        return "{'info':'jsonPOJO'}";
    }

请求

结果

json数组对象

方法
java 复制代码
    //json对象数组
    @RequestMapping("getJsonPOJOList")
    @ResponseBody
    public String getJsonPOJOList(@RequestBody List<Address> jsonPOJOList){
        System.out.println(jsonPOJOList);
        return "{'info':'jsonPOJOList'}";
    }

请求

结果

日期型参数传递

方法

java 复制代码
    //日期型参数传递
    @RequestMapping("/getDateParam")
    @ResponseBody
    public String getDateParam(Date d1, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date d2,@DateTimeFormat(pattern = "yyyy年MM月dd日 HH:mm:ss")  Date d3){
        System.out.println(d1);
        System.out.println(d2);
        System.out.println(d3);
        return "'info':'date'";
    }

在方法参数中用@DateTimeFormat指定pattern为我们需要的日期格式

请求

结果

正确被解析的字符串会被转化为Date类型赋给方法中的形参

响应

响应页面(了解)

java 复制代码
//    响应
    //响应页面(没啥用,因为后面都是异步请求)
    @RequestMapping("/jump")
    public String jumpToJsp(){
        System.out.println("跳转到test.jsp");
        return "/test.jsp";   //这里加一个 /   表示从webapp开始的路径
    }

响应文本数据

方法
java 复制代码
    //响应文本数据
    @RequestMapping(value = "/responseText",produces="text/html;charset=UTF-8;")
    @ResponseBody   //加上这个注解表示将这个方法的返回值作为响应数据
    public String responseText(){
        return "返回文本数据";
    }
请求及响应结果

响应json数据

响应json对象

方法
java 复制代码
    /*
        响应json对象:方法直接返回json对象即可
    */
    @RequestMapping("/responseJsonPOJO")
    @ResponseBody   //加上这个注解表示将这个方法的返回值作为响应数据
    public User responseJsonPOJO(){
        User user = new User("李四", 444, new Address("福建", "厦门"));
        return user;
    }
请求及响应结果

响应json对象数组

方法
java 复制代码
        /*
        响应json对象数组:方法直接返回json对象数组即可
    */
        @RequestMapping("/responseJsonPOJOList")
        @ResponseBody   //加上这个注解表示将这个方法的返回值作为响应数据
        public List<User> responseJsonPOJOList(){
            ArrayList<User> users = new ArrayList<>();
            users.add(new User("绽放三",123,new Address("福建", "泉州")));
            users.add(new User("李四",444,new Address("福建", "厦门")));
            users.add(new User("哇我",6898,new Address("四川", "成都")));
            return users;
        }
请求及响应结果
相关推荐
爱上语文16 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
小宋102119 分钟前
玩转RabbitMQ声明队列交换机、消息转换器
服务器·分布式·rabbitmq
serve the people19 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
m0_6090004222 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
kejijianwen2 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
(⊙o⊙)~哦4 小时前
JavaScript substring() 方法
前端