springMVC Date 类型参数的传递与 postman 模拟

原创
2019/09/02 17:24
阅读数 9.3K

目前接手一个项目,之前同事是这样写的

mvc 
@ApiOperation(value = "绩效统计报表下载接口")
    @RequestMapping(value = "/da-api/admin/report/employee/downloadPerformance", method = {RequestMethod.GET, RequestMethod.POST})
    public Result downloadPerformance(@ModelAttribute DaEmployeeReportQueryParams params) {



对应的参数对象是
public class DaEmployeeReportQueryParams {

    private Date dateBegin;
    private Date dateEnd;
    private String empName;



怎么是直接使用Date 类型接收参数的? 一般不是都是使用 时间字符串?
而且 整个项目并没有发现 其有什么地方对这个时间参数进行 格式转换。
这就其他了。 前端 看起来是直接使用 时间字符串传递的啊? 

而且如果 使用 postman 模拟测试时候,怎么写这个 时间 date 参数?
百度一通,也没什么好方式。

如果在postman  直接使用 时间字符串 进行参数传递,肯定报错了,错误就是 时间字符串不能转为 date 类型

 

于是 请教了一下同事,同事 说看一下测试环境前端的传递参数

是这样的哦,而且是 form Data 

也就是 form 表单提交的。

试着用这样来写参数,不管post ,get 都不行

 

还是报错了。。。

继续看 前端的信息,发现浏览器有一个 转义查看模式

是不是需要转义内容传递?

测试通过,OK!

 

postman form 表单提交

既然前端是 form 表单提交的,那么 如果直接使用 postman的表单 提交应该也可以不用转义了吧。

结果测试通过

 

建议

通过 debug 一下之后, 发现 之所以 可以 将 前端的 时间传 转为 date 类型。

是因为 spring mvc 最终使用到的转换器是  Object转Object 

即 使用了   new Date(String arg) ;  这个 方法。

这个方法就比较神奇 : new Date(“Sun Dec 01 2019 00:00:00 GMT+0800 (中国标准时间)”); 都 没有问题。因此前端的这样的都是可以转的

而这个方法是过时了的,虽然很多情况下没有问题,但是建议 自定义一个转换器 处理一下时间转换的问题。

特别是前端的 时间串 比如 : Sun Dec 01 2019 00:00:00 GMT+0800 (中国标准时间)

比如:

 /**
     * sping boot的将字符串的时间转换为java.util.Date
     * @return
     */
    @Bean
    public Converter<String, Date> addDateConvert() {
        return new Converter<String, Date>() {
            @Override
            public Date convert(String source) {
                if (StringUtils.isEmpty(source)) {
                    return null;
                }
                if (StringUtils.isNumeric(source)) {
                    Long time = Long.parseLong(source);
                    return new Date(time.longValue());
                }
                Date date = null;
                if (CommonUtils.isMatched(source, RegularExpression.dayTimeFormat)) {
                    date = DateUtil.formatDate(source, DateUtil.DEFAULT_DATETIME_FORMAT);
                } else if(CommonUtils.isMatched(source, RegularExpression.dayFormat)) {
                    date = DateUtil.formatDate(source, DateUtil.DEFAULT_DATE_FORMAT);
                }
                return date;
            }
        };
    }

 

 

 

 

 

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部