openfeign get请求参数dto出现错误怎么解决
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容主要讲解"openfeign get请求参数dto出现错误怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"openfeign get请求参数
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
网吧服务器管理维护
电子表格服务器搭建
网络安全与执法工资高吗
ftp服务器怎么做
dsg网络安全
社保管理系统服务器连接异常
天鹅股份进军网络安全
怎么连接逍遥魔兽数据库
数据库是数据管理的方法与技术
数据库的连接信息保存在哪
怎么计算数据库中的总分数
网络安全与微博监管的关系
手机信号怎么传输到服务器
华为CHIA网络技术介绍
国家网络安全普法基地怎么走
rtx服务器端
网络安全攻防大赛影子系统
江苏邮件营销外贸软件开发
高中网络技术应用会考补考
数据库归档文件怎么看大小
matrix 数据库
深圳南湾服务器托管
软件开发怎么创业ppt
杭州炫方网络技术
深圳智能消防软件开发哪家好
构建网络安全环黑板报
5g网络技术弱电一枝花
深圳市全时代互联网科技有限
扬州网络营销软件开发值多少钱
交易记录数据库设计