SpringMVC——请求与响应

一、请求映射路径

🚸发现问题:
在controller包下BookController与UserController控制器类中均有一个相同的访问路径(/save
在这里插入图片描述
在这里插入图片描述

此时启动项目报错,大致内容为 /save已经被BookController Bean中的方法用过
在这里插入图片描述

🚸产生问题:
1、团队多人开发,每人设置不同的请求路径,冲突问题如何解决?

🎊解决方案 :

设置模块名作为请求路径前缀

BookController控制器类 ➠@RequestMapping("/book/save")
UserController控制器类 ➠@RequestMapping("/user/save")

! ! ! 若一个控制器类中有很多方法时,在控制器的类的上面添加注解@RequestMapping(" ")定义整个模块的请求路径前缀
在这里插入图片描述

二、请求参数

请求方式

● Get请求

普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
启动服务器
在这里插入图片描述

发送Get请求携带一个name的参数
在这里插入图片描述

此时后台如何接收?(在方法的形参上传一个相同的参数便可成功接收)
在这里插入图片描述
我们再次启动服务器,然后发送请求,后台便可接收到数据
在这里插入图片描述

➠携带多个参数
在这里插入图片描述
接收成功
在这里插入图片描述
Tip:无论是Get请求还是Post请求对于后台代码没有变化(后台不区分Get、Post)

● Post请求

在这里插入图片描述

出现中文乱码
在这里插入图片描述

Post请求中文乱码处理 设置过滤器(为Web容器添加过滤器并指定字符集,Spring—web包中提供了对应的字符过滤器getServletFilters()
在这里插入图片描述

protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
        }

在这里插入图片描述

参数种类

● 普通参数

如何解决url地址传参名形参变量名不同时传参
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用@RequestParam(绑定请求参数与形参之间的关系)注解将请求参数中的name映射到Username
在这里插入图片描述

● POJO类型参数

创建pojo类
在这里插入图片描述

//POJO参数
    @RequestMapping("/pojoParam")
    @ResponseBody
    public  String pojoParam(User user){
    System.out.println("pojo参数传递 user ==> "+user);
    return "{'pojoParam':'pojo  param'}";
}

发送请求
在这里插入图片描述

接收成功
在这里插入图片描述

● 嵌套POJO类型参数

//嵌套POJO参数
    @RequestMapping("/containPojoParam")
    @ResponseBody
    public  String containpojoParam(User user){
    System.out.println("嵌套pojo参数传递 user ==> "+user);
    return "{'containPojoParam':'containPojo  param'}";
}

Work实体类
在这里插入图片描述

在User实体类中加入Work实体类的属性
在这里插入图片描述

发送请求
在这里插入图片描述

接收成功
在这里插入图片描述

● 数组类型参数

请求参数名与形参属性名相同且请求参数为多个,定义数组类型形参即可接收参数

 //数组参数
    @RequestMapping("/arrayParam")
    @ResponseBody
    public  String arrayParam(String[]like){
    System.out.println("数组参数传递 like ==> "+Arrays.toString(like));
    return "{'arrayParam':'array  param'}";
}

在这里插入图片描述

● 集合类型参数

注意事项:List为集合的属性而不是作为集合的数据(实体),因此需使用@RequestParam绑定参数关系,将数据全部放入。请求参数名与形参属性名也相同!

//集合参数
    @RequestMapping("/listParam")
    @ResponseBody
    public  String listParam(@RequestParam List<String>likes){
    System.out.println("集合参数传递 likes ==> "+likes);
    return "{'listParam':'list  param'}";
}

在这里插入图片描述

● 日期类型参数

日期类型数据基于系统不同格式也不尽相同【接收形参时,根据不同的日期格式设置不同的接收方式】
◆2022-08-01
◆2022/08/01
◆08/01/2022

@DateTimeFormat(设定日期时间型数据格式);属性:pattern:(日期时间格式字符串)

@RequestMapping("/dataParam")
    @ResponseBody
    public String commonParam(Date date,@DateTimeFormat(pattern="yyyy-yy-yy") Date date1,@DateTimeFormat(pattern="yyyy/yy/yy HH:mm:ss") Date date2){
        System.out.println("日期类型参数传递 date==> "+date);
        System.out.println("日期类型参数传递 date1==> "+date1);
        System.out.println("日期类型参数传递 date1==> "+date2);
        return "{'dateParam':'date  param'}";
    }

发送请求
在这里插入图片描述

接收成功
在这里插入图片描述
问题:其内部是如何工作的
●Converter接口(将传递的参数与收集的参数之间的类型进行转换)

三、响应数据

响应页面

//响应页面
    @RequestMapping("/toJumpPage")
    public  String toJumpPage(){
        System.out.println("跳转页面");
        return "index.jsp";
    }

在浏览器中访问成功

在这里插入图片描述

文本数据

//响应文本数据
    @RequestMapping("/toText")
    @ResponseBody
    public  String toText(){
        System.out.println("返回纯文本数据");
        return "GY 666";
    }

返回成功
在这里插入图片描述

响应json数据

@ResponseBody:设置当前控制器当前返回值作为响应体

响应POJO对象

导入json依赖坐标

 <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
  </dependencies>

使用@EnableWebMvc注解开启由json数据转换为对象的功能

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan("com.*")
//开启自动转换json数据的支持【@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据自动进行类型转换】
@EnableWebMvc
public class SpringmvcConfig {
}
//响应POJO对象
    @RequestMapping("/toJsonPOJO")
    @ResponseBody
    public User toJsonPOJO(){
        System.out.println("返回json对象数据");
        User user=new User();
        user.setName("GY");
        user.setAge(24);
        return user;
    }

返回成功
在这里插入图片描述

响应POJO集合对象

//响应POJO集合对象
    @RequestMapping("/toJsonList")
    @ResponseBody
    public List<User> toJsonList(){
        System.out.println("返回json集合数据");
        User user1=new User();
        user1.setName("GY");
        user1.setAge(24);

        User user2=new User();
        user2.setName("YY");
        user2.setAge(21);

        List<User> userList=new ArrayList<>();
        userList.add(user1);
        userList.add(user1);
        return  userList;
    }

返回成功


在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new一个对象_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值