因为前端接口传递日期参数类型都是字符串,controller接口接收参数类型也可以定义成String
如果想以Date类型接收参数的话,那就要配置一下了
@GetMapping("/queryAll")
public JsonResult queryAll(Date startDate, Date endDate){
}
添加一个 config 类 进行统一转换,这种是全局转换!
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 请求路径url中的参数进行时间日期类型的转换
* 字符串->日期Date
*
*/
@Configuration
public class DateConverterConfig implements Converter<String, Date> {
private static final List<String> FORMATTER_LIST = new ArrayList<>(4);
// 只会转换符合这里格式的日期
static {
FORMATTER_LIST.add("yyyy-MM");
FORMATTER_LIST.add("yyyy-MM-dd");
FORMATTER_LIST.add("yyyy-MM-dd hh:mm");
FORMATTER_LIST.add("yyyy-MM-dd hh:mm:ss");
}
@Override
public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if (source.matches("^\\d{4}-\\d{1,2}$")) {
return parseDate(source, FORMATTER_LIST.get(0));
} else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
return parseDate(source, FORMATTER_LIST.get(1));
} else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
return parseDate(source, FORMATTER_LIST.get(2));
} else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
return parseDate(source, FORMATTER_LIST.get(3));
} else {
// TODO 日期解析出错
System.out.println("日期解析出错");
}
return null;
}
/**
* 日期转换方法
*
* @param dateStr 日期字符串
* @param formatter 日期格式
* @return 转换后的Date类型日期
*/
public Date parseDate(String dateStr, String formatter) {
Date date = null;
try {
DateFormat dateFormat = new SimpleDateFormat(formatter);
date = dateFormat.parse(dateStr);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
}
这样 controller 接口就可以使用 Date 类型参数来接收传递过来的字符串类型的时间了。