关于LocalDate格式数据查询问题

1、引申:
前端如果传年月日必须使用LocalDate接收 ,添加:@JsonFormat(pattern = “yyyy-MM-dd”,timezone=“GMT+8”) 注解。
前端如果传年月日时分秒必须使用LocalDateTime接收 ,添加:@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)注解。
2、问题:
由于MySQL数据库的时间默认格式是yyyy-MM-dd HH:mm:ss,带有时分秒,如果前端传年月日(yyyy-MM-dd) 格式就查询不到 开始时间和结束时间为同一天的数据。
3、解决方案:
方案一:将数据库格式转为yyyy-MM-dd
DTO使用String类型来接受前端的时间参数,DO、VO使用时间类型和数据库对应

DATE_FORMAT(start_time,'%Y-%m-%d') >= 开始时间 and DATE_FORMAT(end_time,'%Y-%m-%d') <= 结束时间

方案二:将时间参数格式转为yyyy-MM-dd HH:mm:ss

/**
 * @author lijin
 * @version 1.0
 * @date 2022/10/24 15:26
 *
 * 解决前端传localDate 格式数据,开始时间和结束时间同一天查询不到数据问题
 */
public class TimeConvertUtils {
    public static LocalDateTime startTimeConvert(LocalDate localDate){
        if (ObjectUtil.isNotEmpty(localDate)){
            LocalTime suffix = LocalTime.of(00, 00, 00);
            return LocalDateTime.of(localDate, suffix);
        }
        return null;
    }
    public static LocalDateTime endTimeConvert(LocalDate localDate){
        if (ObjectUtil.isNotEmpty(localDate)){
            LocalTime suffix = LocalTime.of(23, 59, 59);
            return  LocalDateTime.of(localDate, suffix);
        }
        return null;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Feign传递LocalDate格式问题上,我们需要进行一些额外的处理。 首先,Feign默认使用Java的日期转换机制,它将使用标准的`java.time.format.DateTimeFormatter.ISO_LOCAL_DATE`格式LocalDate转换为字符串。因此,我们需要确保服务提供者和消费者使用相同的格式。 其次,Feign不支持直接传递LocalDate对象。我们可以通过自定义一个转换器来实现将LocalDate转换为指定格式的字符串,并将其添加到Feign的配置中。 下面是一个使用自定义转换器的示例: 1. 创建一个实现`Encoder`接口的自定义转换器类,例如`LocalDateEncoder`: ```java import feign.RequestTemplate; import feign.codec.Encoder; public class LocalDateEncoder implements Encoder { private final Encoder delegate; public LocalDateEncoder(Encoder delegate) { this.delegate = delegate; } @Override public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (object instanceof LocalDate) { // 将LocalDate转换为指定格式的字符串 LocalDate localDate = (LocalDate) object; String formattedDate = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE); // 将字符串设置为请求的body template.body(formattedDate); } else { delegate.encode(object, bodyType, template); } } } ``` 2. 创建一个使用自定义转换器的Feign配置类: ```java import feign.codec.Encoder; @Configuration public class FeignConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean public Encoder feignEncoder() { return new LocalDateEncoder(new SpringEncoder(messageConverters)); } } ``` 3. 在服务提供者和消费者的配置文件中分别注入Feign配置类: ```java @Import(FeignConfig.class) @SpringBootApplication public class YourApplication { // ... } ``` 通过以上步骤,我们就能够在Feign中传递LocalDate格式数据了。请注意,在使用自定义转换器之前,一定要确保服务提供者和消费者都已经正确配置了`java.time.LocalDate`的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值