时间请求参数、响应

(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;
    }
    • 发送请求

相关推荐
ProtonBase4 分钟前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
乐之者v11 分钟前
leetCode43.字符串相乘
java·数据结构·算法
suweijie7683 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿4 小时前
List深拷贝后,数据还是被串改
java
向前看-7 小时前
验证码机制
前端·后端
xlsw_7 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹8 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭9 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫9 小时前
泛型(2)
java
超爱吃士力架9 小时前
邀请逻辑
java·linux·后端