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;
        }
请求及响应结果
相关推荐
curdcv_po1 分钟前
新手到老鸟😎🚀玩转 React Effect
前端·react.js
s_yellowfish6 分钟前
Maven笔记
java·笔记·maven
eason_fan7 分钟前
字节前端面试提问:微应用的实现方式有哪些?
前端·面试·前端框架
krack716x12 分钟前
服务器信息收集
运维·服务器
脑斧猴15 分钟前
Linux中进程
linux·服务器·c++
tan180°19 分钟前
Linux自行实现的一个Shell(15)
linux·服务器·c++·后端·vim
Surprisec20 分钟前
动手实践YJS:构建你的第一个实时协作文档编辑器
前端·javascript·面试
晴殇i21 分钟前
JavaScript新一代异步写法:不用await,性能提升80%
前端·面试
患得患失94922 分钟前
【前端】【React】useCallback的作用与使用场景总结
前端·javascript·react.js
wordbaby24 分钟前
TanStack Query :现代 Web 应用的异步状态管理利器
前端