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;
        }
请求及响应结果
相关推荐
匹马夕阳5 分钟前
(一)Canvas极简入门
前端·图形渲染
xiangzhihong88 分钟前
在Windows上 安装使用repo
前端·android-studio
牛马程序员‍13 分钟前
Day97 minio
java·对象存储·minio·oss
!!!52518 分钟前
lombok在高版本idea中注解不生效的解决
java·服务器·前端
F-2H20 分钟前
C语言:构造类型(共用体/联合体,枚举)
java·linux·c语言·开发语言·数据结构·c++·算法
Victor随笔集23 分钟前
Linux常用指令
linux·运维·服务器
旧物有情27 分钟前
蓝桥杯历届真题 #分布式队列 (Java,C++)
java·分布式·蓝桥杯
胡译胡说27 分钟前
DOOM游戏风格的验证码——能杀死3个怪物你就不是自动化程序
前端·游戏·设计
high201131 分钟前
【Java】-- 利用 jar 命令将配置文件添加到 jar 中
java·pycharm·jar
xwm100035 分钟前
next.js实现SSR入门
前端·javascript·chrome