feign发起url请求日期序列化问题

简介: feign发起url请求日期序列化问题

今天在open-feign使用中踩坑,前两天介绍了feign使用url参数传参@SpringQueryMap使用

然后在进行时间类型的传输过程中发现默认的时间时区有误导致相差8小时,且格式不是我们规定的格式

首先我们需要配置:

@Bean
public QueryMapEncoder queryMapEncoder() {
    return new FieldQueryMapEncoder() {
        @Override
        public Map<String, Object> encode(Object object) throws EncodeException {
            Map<String, Object> result = super.encode(object);
            var map = (Map<Class<?>, Object>) ReflectUtil.getFieldValue(this, "classToMetadata");
            var fields = (List<Field>) ReflectUtil.getFieldValue(map.get(object.getClass()), "objectFields");
            var typeFieldsMap = Steam.of(fields).group(Field::getType);
            Steam.of(typeFieldsMap.get(Date.class)).forEach((SerCons<Field>) dateField -> result.put(dateField.getName(), DateUtils.format((Date) dateField.get(object))));
            Steam.of(typeFieldsMap.get(LocalDate.class)).forEach((SerCons<Field>) dateField -> result.put(dateField.getName(), DateUtils.format((LocalDate) dateField.get(object))));
            Steam.of(typeFieldsMap.get(LocalDateTime.class)).forEach((SerCons<Field>) dateField -> result.put(dateField.getName(), DateUtils.format((LocalDateTime) dateField.get(object))));
            return result;
        }
    };
}

这里是让其解析完毕后再用反射去实现,实际并不是最优解,主要是注入自己实现的QueryMapEncoder

然后日期序列化:全局日期请求转换处理

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.beans.PropertyEditorSupport;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

@Slf4j
@RestControllerAdvice
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) // 仅当为WebMvc应用时激活
public class GlobalUrlParamResolveHandler {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        // Date 类型转换
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            @Override
            @SneakyThrows
            public void setAsText(String text) {
                setValue(DateUtils.textToDate(text));
            }
        });
        // LocalDate类型转换
        binder.registerCustomEditor(LocalDate.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) {
                setValue(DateUtils.textToLocalDate(text));
            }
        });
        // LocalDateTime类型转换
        binder.registerCustomEditor(LocalDateTime.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) {
                setValue(DateUtils.textToLocalDateTime(text));
            }
        });
    }

}

成功解决!

相关文章
|
7月前
Copy网页中F12里的请求url到postman,并且把所有参数都带过来
Copy网页中F12里的请求url到postman,并且把所有参数都带过来
110 0
|
7月前
|
Web App开发 JavaScript Java
教会你什么是Spring-Rest- url 请求风格
教会你什么是Spring-Rest- url 请求风格
90 0
|
7月前
feign使用url参数传参@SpringQueryMap使用
feign使用url参数传参@SpringQueryMap使用
148 0
|
5月前
|
缓存 网络协议 Java
(六)网络编程之化身一个请求感受浏览器输入URL后奇妙的网络之旅!
在浏览器上输入一个URL后发生了什么? 这也是面试中老生常谈的话题,包括网上也有大量关于这块的内容。
141 2
|
4月前
|
数据采集 人工智能 监控
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
|
5月前
|
缓存 安全 Web App开发
Chrome插件实现问题之网络进程接收到URL请求后会如何解决
Chrome插件实现问题之网络进程接收到URL请求后会如何解决
|
6月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
95 5
|
6月前
|
应用服务中间件 nginx Windows
nginx实现网站url带参跳转 POST请求GET请求跳转
nginx实现网站url带参跳转 POST请求GET请求跳转
318 1
|
5月前
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
270 0
|
6月前
|
Windows
iis配置http重定向302转发get请求并去掉最后的斜杠/ iis重定向 iis去除url最后的斜杠 iis重定向链接斜杠(已解决)
iis配置http重定向302转发get请求并去掉最后的斜杠/ iis重定向 iis去除url最后的斜杠 iis重定向链接斜杠(已解决)
177 0