openfeign get请求参数dto出现错误怎么解决
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"openfeign get请求参数dto出现错误怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"openfeign get请求参数
千家信息网最后更新 2026年11月03日openfeign get请求参数dto出现错误怎么解决
本篇内容主要讲解"openfeign get请求参数dto出现错误怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"openfeign get请求参数dto出现错误怎么解决"吧!
项目中使用的是spring boot 2.3.3,spring-cloud Hoxton.SR8.
在使用feign调用服务时 使用@GetMapping 和 @SpringQueryMap 和传输DTO对象,其中DTO对象中包含LocalDateTime属性,一直报类型转换异常,无法调用服务。解决方法有很多,找了网上很多解决办法都没效果,大体都是FastJson 序列化之类的(可能每个项目差异吧), 解决过程分析暂不分析吧。先行记录一下,因为看到网上很多人貌似都遇到过这个问题。以下是服务提供方
@FeignClient(value = "user-service", path = "/user/v1")public interface UserClient {@GetMapping("/")PageVO getUserList(@SpringQueryMap UserDTO userDTO);} @Data@ApiModel(value = "运营平台用户列表查询参数")public class UserDTO implements Serializable { private static final long serialVersionUID = -3767202379100110105L; @ApiModelProperty(value = "用户id") private Long id; @Size(max = 12, message = "nickName:用户昵称最大长度为12") @ApiModelProperty(value = "用户昵称") private String nickName; @ApiModelProperty(value = "手机号码") private String phone; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "创建时间开始") private LocalDateTime createdAtStart; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "创建时间结束") private LocalDateTime createdAtEnd; @ApiModelProperty(value = "页码", required = true) private Integer page; @ApiModelProperty(value = "每页条数", required = true) private Integer size;}核心重点:新增一个QueryMapEncoder
import feign.Param;import feign.QueryMapEncoder;import feign.codec.EncodeException;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.*;public class LocalDateTimeQueryMapEncoder implements QueryMapEncoder { private final Map, ObjectParamMetadata> classToMetadata = new HashMap, ObjectParamMetadata>(); private final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Override public Map encode(Object object) throws EncodeException { try { ObjectParamMetadata metadata = getMetadata(object.getClass()); Map propertyNameToValue = new HashMap(); for (PropertyDescriptor pd : metadata.objectProperties) { Method method = pd.getReadMethod(); Object value = method.invoke(object); if (value != null && value != object) { Param alias = method.getAnnotation(Param.class); String name = alias != null ? alias.value() : pd.getName(); if("java.time.LocalDateTime".equals(method.getReturnType().getName())){ //propertyNameToValue.put(name, "2020-10-07 01:01:00"); propertyNameToValue.put(name, dtf.format((LocalDateTime)value)); }else{ propertyNameToValue.put(name, value); } } } return propertyNameToValue; } catch (IllegalAccessException | IntrospectionException | InvocationTargetException e) { throw new EncodeException("Failure encoding object into query map", e); } } private ObjectParamMetadata getMetadata(Class> objectType) throws IntrospectionException { ObjectParamMetadata metadata = classToMetadata.get(objectType); if (metadata == null) { metadata = ObjectParamMetadata.parseObjectType(objectType); classToMetadata.put(objectType, metadata); } return metadata; } private static class ObjectParamMetadata { private final List objectProperties; private ObjectParamMetadata(List objectProperties) { this.objectProperties = Collections.unmodifiableList(objectProperties); } private static ObjectParamMetadata parseObjectType(Class> type) throws IntrospectionException { List properties = new ArrayList(); for (PropertyDescriptor pd : Introspector.getBeanInfo(type).getPropertyDescriptors()) { boolean isGetterMethod = pd.getReadMethod() != null && !"class".equals(pd.getName()); if (isGetterMethod) { properties.add(pd); } } return new ObjectParamMetadata(properties); } }} @Configurationpublic class CustomFeignConfig { @Bean public Feign.Builder feignBuilder() { return Feign.builder() .queryMapEncoder(new LocalDateTimeQueryMapEncoder()) .retryer(Retryer.NEVER_RETRY); }}到此,相信大家对"openfeign get请求参数dto出现错误怎么解决"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
参数
用户
错误
服务
内容
对象
方法
时间
昵称
项目
分析
学习
查询
实用
更深
最大
供方
兴趣
办法
号码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技工作委员会
互联网是不是新科技
工业互联网科技新基建
科技互联网技术
没上市的科技互联网公司
深圳互联网科技公司
万易互联网科技
互联网科技集团
北京互联网络科技有限公司
赫美联合互联网科技
狮子座互联网科技培训
佰商互联网科技有限公司
镁科技互联网资讯平台
盛创互联网科技有限公司
互联网和黑科技的看法
企晟互联网信息科技有限公司
无锡工业互联网科技有限公司
互联网时代的科技公司
互联网金融运营模式中的金融科技
科技互联网专业务虚会材料
湖南永感互联网科技有限公司
互联网科技活动banner
互联网科技公司怎么样
西安互联网科技公司
赫美联合互联网科技
互联网企业和科技型企业
玉溪互联网科技怎么选
上海互联网科技公司ppt
科技互联网公司两年变化
互联网科技快速发展优美句子