基于Java8开发接口时,处理Java8中的日期

前言:在java8之前我们都是使用Date时间类,但是java8中提供了更好用的日期时间API,但是我们习惯了日期的格式为: yyyy-MM-dd HH:mm:ss,那在java8我们如何处理这样的日期格式呢?

处理前端传过来的日期时间(转换为LocalDateTime/LocalDate/LocalTime)

上代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
 
import java.beans.PropertyEditorSupport;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
 
import static org.slf4j.LoggerFactory.*;
 
/**
 * @Classname GlobalExceptionHandler
 * @Description 处理Java8的日期与时间
 */
@ControllerAdvice
public class GlobalExceptionHandler {
 
    private final static Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(LocalDate.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) throws IllegalArgumentException {
                setValue(LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            }
        });
        binder.registerCustomEditor(LocalDateTime.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) throws IllegalArgumentException {
                log.info("=====initBinder=====的参数为:" + text);
                setValue(LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
        });
        binder.registerCustomEditor(LocalTime.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) throws IllegalArgumentException {
                setValue(LocalTime.parse(text, DateTimeFormatter.ofPattern("HH:mm:ss")));
            }
        });
    }
}

将API中的时间以固定的格式返回

@Configuration
public class JacksonConfiguration {

	@Bean(name = "objectMapper")
	public ObjectMapper getObjectMapper() {
		ObjectMapper om = new ObjectMapper();
		om.registerModule(javaTimeModule()).registerModule(problemModule())
				.registerModule(constraintViolationProblemModule());
		return om;
	}

	@Bean
	public JavaTimeModule javaTimeModule() {
		JavaTimeModule javaTimeModule = new JavaTimeModule();
		javaTimeModule.addSerializer(LocalDateTime.class,
				new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		javaTimeModule.addSerializer(LocalDate.class,
				new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
		javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
		javaTimeModule.addDeserializer(LocalDateTime.class,
				new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		javaTimeModule.addDeserializer(LocalDate.class,
				new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
		javaTimeModule.addDeserializer(LocalTime.class,
				new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
		return javaTimeModule;
	}

	/* Jackson Afterburner module to speed up serialization/deserialization */
	@Bean
	public AfterburnerModule afterburnerModule() {
		return new AfterburnerModule();
	}

	/* Module for serialization/deserialization of RFC7807 Problem. */
	@Bean
	ProblemModule problemModule() {
		return new ProblemModule();
	}

	/*
	 * Module for serialization/deserialization of ConstraintViolationProblem.
	 */
	@Bean
	ConstraintViolationProblemModule constraintViolationProblemModule() {
		return new ConstraintViolationProblemModule();
	}
}
posted @ 2019-08-22 13:22  灬毛毛  阅读(719)  评论(0编辑  收藏  举报