SpringBoot/MVC接收JDK8中的日期时间参数(LocalDate/LocalTime/LocalDateTime)
前言
版本说明
JDK=1.8.0_221 springboot=2.2.3.RELEASE
演练
实体类
package top.simba1949.common; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; /** * @Author Theodore * @Date 2020/1/19 10:21 */ @Data public class User implements Serializable { private static final long serialVersionUID = -552127380120581998L; private Integer id; private String username; /** * LocalDateTime 本身带有时区信息 * @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") * <li>pattern : 用于接收参数的格式 </li> */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTime; @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate date; @JsonFormat(pattern = "HH:mm:ss") private LocalTime time; }
Controller
package top.simba1949.controller; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import top.simba1949.common.User; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; /** * @Author Theodore * @Date 2020/1/19 10:23 */ @Slf4j @RestController @RequestMapping("user") public class UserController { @GetMapping("say") public String sayHello(){ return "Hello Tester"; } /** * <p> * Method : POST * RequestBody: { "username": "李白", "dateTime": "2020-01-19 01:02:03", "date": "2020-01-02", "time": "04:05:06" } * </p> * @param user * @return */ @PostMapping public String insert(@RequestBody User user){ String userStr = JSON.toJSONString(user); log.info("————————————————————————————————————"); log.info(userStr); log.info("————————————————————————————————————"); LocalDateTime now = LocalDateTime.now(); // 时间格式化 // 创建格式化/解析模板 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 格式化 String format = dateTimeFormatter.format(now); // 时间解析 // 创建格式化/解析模板 DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 解析 LocalDate parse = LocalDate.parse("2020-02-02", pattern); // JDK8 中月份从 1~12, 星期从 1~7 int year = now.getYear(); int month = now.getMonth().getValue(); int dyaOfWeek = now.getDayOfWeek().getValue(); return "SUCCESS"; } /** * <p> * Method : GET * RequestParams: start=2019-12-31 00:01:02&end=2020-12-31 00:01:02 * </p> * @param start * @param end * @return */ @GetMapping("date-time") public String list(LocalDateTime start, LocalDateTime end){ log.info("start : {}; end : {}", start, end); return "LocalDateTime"; } /** * <p> * Method : GET * RequestParams: start=2019-12-31&end=2020-12-31 * </p> * @param start * @param end * @return */ @GetMapping("date") public String list(LocalDate start, LocalDate end){ log.info("start : {}; end : {}", start, end); return "LocalDate"; } /** * <p> * Method : GET * RequestParams: start=00:01:02&end=23:59:59 * </p> * @param start * @param end * @return */ @GetMapping("time") public String list(LocalTime start, LocalTime end){ log.info("start : {}; end : {}", start, end); return "LocalTime"; } }
LocalDateTimeConfig 配置类
package top.simba1949.config; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; /** * 该配置用于获取 RequestParam或者PathVariable 时的日期、时间参数 * * @Author Theodore * @Date 2020/1/19 10:27 */ @Configuration public class LocalDateTimeConfig { @Bean public Converter<String, LocalDateTime> localDateTimeConverter() { // 使用 lambda 表达式有问题,暂未解决 return new Converter<String, LocalDateTime>() { @Override public LocalDateTime convert(String s) { if (StringUtils.isBlank(s)){ return null; } // 时间格式化 // 创建格式化/解析模板 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 解析 LocalDateTime parse = LocalDateTime.parse(s, dateTimeFormatter); return parse; } }; } @Bean public Converter<String, LocalDate> localDateConverter() { return new Converter<String, LocalDate>() { @Override public LocalDate convert(String s) { if (StringUtils.isBlank(s)){ return null; } // 时间格式化 // 创建格式化/解析模板 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 解析 LocalDate parse = LocalDate.parse(s, dateTimeFormatter); return parse; } }; } @Bean public Converter<String, LocalTime> localTimeConverter() { return new Converter<String, LocalTime>(){ @Override public LocalTime convert(String s) { if (StringUtils.isBlank(s)){ return null; } // 时间格式化 // 创建格式化/解析模板 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); // 解析 LocalTime parse = LocalTime.parse(s, dateTimeFormatter); return parse; } }; } }
启动类
package top.simba1949; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @Author Theodore * @Date 2020/1/19 10:20 */ @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
配置文件
server: port: 8081 spring: application: name: local-date-time-learn