美文网首页
前后端时间格式

前后端时间格式

作者: 墨色尘埃 | 来源:发表于2018-02-04 15:41 被阅读437次

    前端传毫秒
    1、不加@JsonFormat
    前端:1517191582000(毫秒)
    后台:private Date trialTime;
    列表返回的时间格式:毫秒
    2、加@JsonFormat
    ① @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    前端:1517191582000(毫秒)
    后台:
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date trialTime;
    列表返回的时间格式:yyyy-MM-dd HH:mm:ss

        @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private Date trialTime;
        public Date getTrialTime() {
            return trialTime;
        }
        public void setTrialTime(Date trialTime) {
            this.trialTime = trialTime;
        }
    

    ② @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
    前端:1517191582000(毫秒)
    后台:
    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
    private Date trialTime;
    列表返回的时间格式:yyyy-MM-dd

    前端传"2018-01-03T02:01:13.678Z"
    1、不加@JsonFormat
    前端:"2018-01-03T02:01:13.678Z"
    后台:private Date trialTime;
    列表返回的时间格式:毫秒
    2、加@JsonFormat
    ① 不支持"yyyy-MM-dd HH:mm:ss"这种格式
    ② 支持"yyyy-MM-dd"这种格式
    前端:"2018-01-03T02:01:13.678Z"
    后台:
    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
    private Date trialTime;
    列表返回的时间格式:yyyy-MM-dd

        //报错@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        //不报错@JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        private Date trialTime;
        public Date getTrialTime() {
            return trialTime;
        }
        public void setTrialTime(Date trialTime) {
            this.trialTime = trialTime;
        }
    
        //报错@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        //不报错@JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        private Date trialTime;
        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        public Date getTrialTime() {
            return trialTime;
        }
        public void setTrialTime(Date trialTime) {
            this.trialTime = trialTime;
        }
    

    前端传"yyyy-MM-dd HH:mm:ss"
    1、不加@JsonFormat报错
    2、加@JsonFormat
    ① 支持"yyyy-MM-dd HH:mm:ss"这种格式
    前端:"yyyy-MM-dd HH:mm:ss"
    后台:
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date trialTime;
    列表返回的时间格式:yyyy-MM-dd HH:mm:ss
    ② 不支持"yyyy-MM-dd"这种格式,因为前端传的时间格式已经限定死了

    前端传"yyyy-MM-dd"
    1、不加@JsonFormat (注:get请求,但是是用@RequestParam Map formData接收的,所以不影响。见贵安项目ArticleListControl中articleInfo接口)
    前端:"yyyy-MM-dd"
    后台:private Date trialTime;
    列表返回的时间格式:毫秒
    2、加@JsonFormat
    ① 不支持"yyyy-MM-dd HH:mm:ss"这种格式
    ② 支持"yyyy-MM-dd"这种格式
    前端:"yyyy-MM-dd"
    后台:
    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
    private Date trialTime;
    列表返回的时间格式:yyyy-MM-dd

        //报错@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        //不报错@JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        private Date trialTime;
    

    总结
    Jackson不支持这种时间格式的:yyyy-MM-dd HH:mm:ss,试了一下,果然报错来了
    Can not construct instance of java.util.Date from String value '2015-12-22 10:10:10': not a valid representation (error: Failed to parse Date value '2015-12-22 10:10:10': Can not parse date "2015-12-22 10:10:10": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
    看提示好像只支持这几种:
    "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"

    主要看前端到→后台是否需要序列化
    get请求时
    ① 后台用@ModelAttribute T model方式接收前端数据,会把传进来的参数序列化成对象T,前端传的参数有一个是String类型的2018-12-25时间,但是对象T中是date类型,所以如果不做转换的话会报400错误,在对象T的对应参数上加@DateTimeFormat(pattern = "yyyy-MM-dd")。通过@DateTimeFormat这个日期格式化注解,就可以将前端传入的字符串格式化为日期类型可以识别的内容信息了。当然也可以使用@DateTimeFormat(iso=ISO.DATE)这样子的格式化来进行处理,效果是一样的。JsonFormat适用于json方式?

        /**
         * @param page 查询一般传入参数为current和size, 例如/listPage?current=1&size=5,
         * @return 返回分页数据
         */
        @RequestMapping(value = "/page", method = RequestMethod.GET)
        public ResponseObj<Page<T>> listPage(@ModelAttribute Page<T> page,
                                             @ModelAttribute T model) {
    
            return baseExecute.listPage(page, model, service);
        }
    

    ② 如果后台用@RequestParam Map formData接收前端参数的话,即使前端传的时间是yyyy-MM-dd方式也不会报错,因为Map可以接收任意类型的参数

        /**
         * 获取文章待办列表信息接口【需要根据角色过滤数据】
         */
        @RequestMapping(value = "/articleInfo", method = RequestMethod.GET)
        public ResponseObj<PageUtil> list(@RequestParam Map formData) {
            if(StringUtils.isEmpty(formData.get("sort"))) {
                formData.put("sort","NODE_ID,IS_TOP,-OPERATE_TIME");
            }
            CommonUtil.convertFormData(formData);
    
            Integer i = articleListMapper.count(formData);
            List<ArticleList> list = articleListMapper.list(formData);
    
            for (ArticleList article : list) {
                List<Attachment> attachments = attachmentMapper.list(article.getArticleId());
                article.setFilePath(attachments);
            }
    
            PageUtil pageUtil = new PageUtil(i, formData);
            pageUtil.setResultList(list);
            return new ResponseObj<>(pageUtil, RetCode.SUCCESS);
        }
    

    post请求时
    因为post请求是用@RequestBody

    @JsonFormat与@DateTimeFormat注解的使用

    相关文章

      网友评论

          本文标题:前后端时间格式

          本文链接:https://www.haomeiwen.com/subject/uiiyaxtx.html