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

设置请求访问路径

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

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

两种请求

get请求

post请求

测试案例

    @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请求中文乱码问题

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

5种参数类型传递

普通参数

方法
    //普通参数
    @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实体类

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

请求

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

结果

嵌套POJO参数

User实体类,嵌套Address

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

请求

结果 

 

数组参数

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

请求

结果

集合参数

方法
    @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

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

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

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

json数组

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

请求

结果

json对象

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

请求

结果

json数组对象

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

请求

结果

日期型参数传递

方法

    //日期型参数传递
    @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类型赋给方法中的形参

响应

响应页面(了解)

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

响应文本数据

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

响应json数据

响应json对象

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

响应json对象数组

方法
        /*
        响应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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值