欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > fegin返回参数统一处理

fegin返回参数统一处理

2024/10/25 4:25:43 来源:https://blog.csdn.net/bennettzhou404/article/details/139878539  浏览:    关键词:fegin返回参数统一处理

相关版本:

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version></parent><properties><spring-cloud.version>2023.0.0</spring-cloud.version><spring-cloud-alibaba.version>2023.0.0.0-RC1</spring-cloud-alibaba.version><fastjson2.version>2.0.50</fastjson2.version></properties>

创建模块feign
引入相关依赖:

    <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--必须与feign一起引入--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><dependency><groupId>com.lease</groupId><artifactId>model</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId></dependency></dependencies>

对feign返回结果统一处理

/*** 自定义解析类* @author YuelongZhou* @date 2024/6/22*/
public class MyResultDecoder implements Decoder {private final SpringDecoder decoder;public MyResultDecoder(SpringDecoder springDecoder) {this.decoder = springDecoder;}@Overridepublic Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {Result result = JSON.parseObject(response.body().asReader(StandardCharsets.UTF_8), Result.class);Assert.isTrue(ResultStatusEnum.SUCCESS.getCode().equals(result.getCode()),"数据解析失败");String dataStr = JSON.toJSONString(result.getData());JavaType javaType = TypeFactory.defaultInstance().constructType(type);return new ObjectMapper().readValue(dataStr,javaType);}
}

添加feign拦截器,实现请求头上下文传递

/*** @author YuelongZhou* @date 2024/6/22*/
public class FeignRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();String header = "access-token";String token = request.getHeader(header);requestTemplate.header(header,token);}
}

使上面2个配置生效

@Configuration
@EnableFeignClients(basePackages = "com.lease.feign.client")
public class FeignConfig {@Beanpublic Decoder decoder(ObjectFactory<HttpMessageConverters> msgConverters, ObjectProvider<HttpMessageConverterCustomizer> customizers) {return new OptionalDecoder((new ResponseEntityDecoder(new MyResultDecoder(new SpringDecoder(msgConverters, customizers)))));}@Beanpublic RequestInterceptor feignRequestInterceptor() {return new FeignRequestInterceptor();}@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();objectMapper.registerModule(new JavaTimeModule());return objectMapper;}}

feign接口

@FeignClient(value = FeignClientConstants.LEASE_WEB_ADMIN,path = "/admin/facility",contextId = "roomFacilityFeignClient"
)
public interface RoomFacilityFeignClient {@PostMapping("/getRoomFacilityListByRoomId")List<RoomFacility>getRoomFacilityListByRoomId(@RequestBody IdParam param);
}

服务controller接口

    @Operation(summary = "根据房间id查询房间配套关联")@PostMapping("/getRoomFacilityListByRoomId")public Result<List<RoomFacility>>getRoomFacilityListByRoomId(@RequestBody IdParam param) {return ResultUtil.success(roomFacilityService.getRoomFacilityListByRoomId(param));}

若DTO中涉及LocalDateTime

    @JsonDeserialize(using = LocalDateTimeDeserializer.class)		// 反序列化@JsonSerialize(using = LocalDateTimeSerializer.class)@TableField(value = "create_time",fill = FieldFill.INSERT)private LocalDateTime createTime;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com