最近开始接触SpringBoot,不得不说他很强大。
下面说说SpringBoot接受时间的问题,网上的方法很多,我就说说我自己的。
@NotNull(message = "过期日不能为空")
@DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
private Date expired;
用@DateTimeFormat 注解去接受,就是不会去报错。
返回时间格式方式一:
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
用接送@JsonFormat 注解去返回,我用的时jackson的json转换包,SpringBoot 他自身就集成了这些,所以不用去引入。
返回时间格式方式二(这种方式不用注解):
首先去自定义一个类去继承 StdDateFormat 这个类,然后去重写他的method.
import com.fasterxml.jackson.databind.util.StdDateFormat;
import org.apache.commons.lang3.StringUtils;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @ClassName CustomDateFormat
* @Description TODO
* @Date 2018/8/16 9:32
* @Author itastro
* @Version 1.0
**/
public class CustomDateFormat extends StdDateFormat {
private static final long serialVersionUID = -3201781773655300201L;
public static final CustomDateFormat instance = new CustomDateFormat();
@Override
/**
* @ClassName: CustomDateFormat
* 这个方法可不写,jckson主要使用的是parse(String)这个方法用来转换日期格式的,
* 只要覆盖parse(String)这个方法即可
* @date 2018年01月23日 下午4:28:57
*/
public Date parse(String dateStr, ParsePosition pos) {
SimpleDateFormat sdf = null;
if(StringUtils.isBlank(dateStr)){
return null;
}
if (dateStr.length() == 10) {
sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(dateStr, pos);
}
if (dateStr.length() == 16) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return sdf.parse(dateStr, pos);
}
if (dateStr.length() == 19) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(dateStr, pos);
}
if (dateStr.length() == 23) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return sdf.parse(dateStr, pos);
}
return super.parse(dateStr, pos);
}
@Override
public Date parse(String dateStr) {
ParsePosition pos = new ParsePosition(0);
SimpleDateFormat sdf = null;
if(StringUtils.isBlank(dateStr)){
return null;
}
if (dateStr.length() == 10) {
sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(dateStr, pos);
}
if (dateStr.length() == 16) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return sdf.parse(dateStr, pos);
}
if (dateStr.length() == 19) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(dateStr, pos);
}
if (dateStr.length() == 23) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return sdf.parse(dateStr, pos);
}
return super.parse(dateStr, pos);
}
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date, toAppendTo, fieldPosition);
}
public CustomDateFormat clone() {
return new CustomDateFormat();
}
}
接下来在让SpringBoot启动类实现WebMvcConfigurer这个类,重写他的方法。
@MapperScan("com.bl.station.mapper")
@ComponentScan("com.bl.station.*")
@EnableAutoConfiguration
@ImportResource(locations = {"classpath:mykaptcha.xml"})
@ServletComponentScan
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)// 解决jmx重复注册bean的问题
@Import(FdfsClientConfig.class)
@EnableSwagger2
public class BlstationWebApplication extends SpringBootServletInitializer implements WebMvcConfigurer {
public static void main(String[] args) {
SpringApplication.run(BlstationWebApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(BlstationWebApplication.class);
}
@Bean
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//设置日期格式
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(CustomDateFormat.instance);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
//设置中文编码格式
List list = new ArrayList();
list.add(MediaType.APPLICATION_JSON_UTF8);
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
return mappingJackson2HttpMessageConverter;
}
@Override
public void configureMessageConverters(List> converters) {
converters.add(getMappingJackson2HttpMessageConverter());
}
}
这样的话他的日期返回格式就正确了。
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
加上 timezone = “GMT+8”,如果还是不行请进行修改数据库连接配置。
url: jdbc:mysql://localhost:3306/station?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
serverTimezone=Asia/Shanghai 设置成他。
还有这个配置我没试,有兴趣的可以试下:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/station?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
username: root
password: Zn252600@
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
到此结束,亲测可用,有其他好办法的伙伴可以告诉我下,小生这厢有礼了。