开发者社区> 问答> 正文

SpringBoot Get 请求如何将一个时间戳转换为Date, 最好是框架原?400报错

SpringBoot Get 请求如何将一个时间戳转换为Date, 最好是框架原本就有的? 400 报错

@GetMapping("/test")
public Person test(Person person){
    return person;
}
public class Person {
    private Date date;
}

展开
收起
爱吃鱼的程序员 2020-05-30 22:25:44 1500 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    方法一:自己仿写个CustomDateEditor

    @InitBinder
    protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

    方法二:等有缘人补充 0.0

    ######回复 @鶴嘯九天 : 是让你自定义 CustomDateEditor 解析类...######这个是 2020/03/12 格式的解析,不是我提到的时间的解析。不过还是谢谢!######

    直接用@JsonFormat 就可以吧。 jackson 包  spring boot 2.2.5亲测
     

    ######回复 @鶴嘯九天 : 谁告诉你 Get 不能传body了。新规范早就没限制这个了啊。要学会变通。######我这个是GET请求的表单提交,@JsonFormat应该是处理json格式的######

    1.

    /**
     * date序列化
     */
    @InitBinder
    protected void init(WebDataBinder binder) {
        // Date 类型转换
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) {
                setValue(dataBinder(text));
            }
        });
    }

    2.

    protected Date dataBinder(String value) {
        //常规的日期格式
        Date parseDate = DateUtils.parseDate(value);
        //时间戳
        if (null == parseDate) {
            return new Date(Long.valueOf(value));
        }
        return parseDate;
    }

    工具类:

    /**
     * 日期型字符串转化为日期 格式
     * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
     * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
     * "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }
     */
    public static Date parseDate(Object str) {
        if (str == null) {
            return null;
        }
        try {
            return parseDate(str.toString(), parsePatterns);
        } catch (ParseException e) {
            return null;
        }
    }

    常规日期格式:

    private static String[] parsePatterns = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH", "yyyy-MM",
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM"};

    这样写应该可以的吧

    ######回复 @鶴嘯九天 : 那就不知道了,如果题主有发现@也告诉我一下######这样写是没啥问题的,我想的是有没有类似@DateFormat 这种注解,是由原框架实现的,不用自己封装。因为jackson的源码是有对时间戳处理的,但是 @DateFormat 就没有办法了######

    spring.jackson.date-format= yyyy-MM-dd HH:mm:ss

    ######

    在@Controller注释的类中,添加如下方法:

    @InitBinder
    protected void init(WebDataBinder binder) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        df.setLenient(false);
        binder.registerCustomEditor(Date.class,new CustomDateEditor(df,true));
    }

     

    2020-05-30 22:25:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载