时间请求参数、响应

(7)时间请求参数

  • 1.默认格式转换

    • 控制器
    复制代码
    @RequestMapping("/commonDate")
    @ResponseBody
    public String commonDate(Date date){
        System.out.println("默认格式时间参数 date ==> "+date);
        return "{'module' : commonDate}";
    }
    • 发送请求

    • 采取默认格式转换无需其它操作,但是对字符串格式有要求只能是yyyy/MM/dd HH:mm:ss

  • 2.自定义时间格式转换

    • 在SpringMVCConfig配置类中开启注解支持@EnableWebMvc
    复制代码
    @Configuration
    @ComponentScan("dateParam")
    @EnableWebMvc
    public class SpringMVCConfig {...}
    • 在控制器参数上使用@DateTimeFormat(pattern="yyyy&MM&dd HH:mm:ss")==》pattern的值问自定义参数,&==》日期任意连接符
    复制代码
    @RequestMapping("/customDate")
    @ResponseBody
    public String customDate(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
                        @DateTimeFormat(pattern = "yyyy-MM-dd HH.mm.ss") Date date2) {
        System.out.println("自定义格式时间参数 date(yyyy-MM-dd) ==> " + date);
        System.out.println("自定义格式时间参数 date(yyyy-MM-dd HH.mm.ss) ==> " + date2);
        return "{'module' : customDate}";
    }
    • 发送请求

(8)内部实现原理

  • SpringMVC实现下列自动转换

    • 前端传递字符串,后端使用日期Date接收

    • 前端传递JSON数据,后端使用对象接收

    • 前端传递字符串,后端使用Integer接收

    • 后台需要的数据类型有很多中

    • 在数据的传递过程中存在很多类型的转换

  • 如何实现自动转换的呢?

    • SpringMVC中提供了很多类型转换接口和实现类

    • 在框架中,有一些类型转换接口,其中有:

    • (1) Converter接口

复制代码
/**
*   S: the source type
*   T: the target type
*/
public interface Converter<S, T> {
    @Nullable
    //该方法就是将从页面上接收的数据(S)转换成我们想要的数据类型(T)返回
    T convert(S source);
}
  • 注意:Converter所属的包为org.springframework.core.convert.converter

    • Converter接口的实现类

  • 框架中有提供很多对应Converter接口的实现类,用来实现不同数据类型之间的转换,如:

  • 请求参数年龄数据(String→Integer)

  • 日期格式转换(String → Date)

    • (2) HttpMessageConverter接口

      • 该接口是实现对象与JSON之间的转换工作

    ※※※注意:SpringMVC的配置类把@EnableWebMvc当做标配配置上去,不要省略※※※

(9)响应

  • 1.响应页面

    • 控制器
    复制代码
    @RequestMapping("/toJumpPage")
    @RequestBody
    public String toJumpPage(){
        return "index.jsp";
    }
    • 发送请求

    • 使用@RequestBody注解后请求响应的是字符串,并非页面,这是由于页面响应返回的是目标路径,注解后它不会解析其路径

  • 2.响应纯文本

    • 控制器
    复制代码
    //@RequestMapping("/toText")
    @RequestMapping(value = "/toText",produces =  {"text/html;charset=UTF-8;", "application/json;"})
    @ResponseBody
    public String toText(){
        return "纯文本";
    }
    • 发送请求

    • 响应中文乱码==》在@RequestMapping上使用属性produces设置编码

  • 3.响应POJO对象

    • 控制器
    复制代码
    @RequestMapping("/toPojo")
    @ResponseBody
    public User toPojo(){
        return new User("模拟数据库用户1",18);
    }
    • 发送请求

  • 4.响应POJO对象集合

    • 控制器
    复制代码
    @RequestMapping("/toPojoList")
    @ResponseBody
    public List<User> toPojoList(){
        User user = new User("模拟数据库用户1", 18);
        User user2 = new User("模拟数据库用户2", 19);
        User user3 = new User("模拟数据库用户3", 20);
        ArrayList<User> list = new ArrayList<User>();
        list.add(user);
        list.add(user2);
        list.add(user3);
        return list;
    }
    • 发送请求

相关推荐
写码跑山的老艾1 小时前
优惠券为何能反复使用?一次算价与提单不一致的资损复盘
后端
RAG学徒loading1 小时前
我把 RAG 召回从 57.6% 做到 78.8%,然后发现 75% 的真实问题它答不了
后端
用户42569399996201 小时前
我的 HashMap 查找全废了,但 36 个测试全绿
后端
小番茄程序猿1 小时前
Redis 编码压测 59 轮:HSET 快 23 倍是假象,SMEMBERS 慢 30 倍是真的
redis·后端
Moment2 小时前
代码都能让 Agent 写了,我们为什么还要学前端?
前端·后端·面试
aiks_yuan2 小时前
Java CPU 100% 怎么排查:JDK 11 起 jstack 自带线程 CPU 时间,不用再 top -H 换算十六进制(JDK 8、11、17 实测)
java
AI入职记2 小时前
Spring AI 实测:不挂工具,模型真的会瞎编吗?
后端·ai编程
wei_shuo2 小时前
SQL Server数据迁移实战:内置故障诊断工具与根因分析实践
后端
一条Go2 小时前
告警指纹:一次故障为什么只产生一条 FIRING 记录
后端·架构·github